У меня чисто теоретический вопрос, связанный с безопасностью отправки форм и данных с сайта и антиспамом.
Могу ли я обойтись без какой-либо своей или гугл капчи, если при открытии сессии для форм будет генериться отдельный ключ, сохраняться в таблицу mysql в паре phpsessionid-key и в массиве S_SESSION(в кодированной форме)? Соответственно, при получении формы на стороне сервера будет проверка на наличие пары ключ-значение и при отсутствии или несовпадении данных - непринятие формы.
И что посоветуете почитать по этой тематике, я просто не хочу ставить никакие сторонние расширения или скрипты на свой сайт, но максимально иметь возможность избежать проблем со спамом или взломом.
PDO, распределенные запросы и валидацию данных я знаю).
Такая защита не будет лишней, конечно, но непонятно как она защитит от спама. Спам-боты могут ведь перед каждым сообщением начинать новую сессию, и вы им выдадите ключи.
Как уже заметили коллеги - вы путаете 2 принципиально разные задачи - защиту от спама и защиту от кроссдоменного запроса.
Для защиты от спама вам необходимо проверять действие на некоторые условия или предпринимать некоторые меры защиты:
1) Проверять что данные вводит человек, а не робот (для этого есть капча, токен в данном случае бесполезен, так как боты его могут получить абсолютно так же, как живые пользователи)
2) Вариант с капчей можно не использовать для зарегистрированных и залогиненных пользователей, но тогда нужно следить за спамом в ручном режиме и блокировать аккаунт при такой активности. Как вариант - отслеживать частоту запросов, и при превышении некоторого числа за определенное время показывать капчу (так например работает вк).
То что ты описал похоже на CRF токены, защита от межсайтовых запросов. https://habr.com/ru/post/318748/
Поможет с защитой, если форма приходит с стороннего сайта.
Без гугл капчи/яндекс капчи и тех подобных не обойтись, так как спамеры очень умные, даже теже самые капчи можно разгадывать за некую сумму денег при желании
Добавлю, что "медовые ловушки" отлично работают если спамер не знает, что его отфутболили.
Т.е. если мы считаем сообщение спамом, то спамеру нужно ответить "всё хорошо, сообщение отправлено", а сообщение или метим как спам, или и вовсе "теряем".
batyrmastyr, шедоубан вообще хорошо помогает, и от троллей, и от спамеров. самое сложное (но и опциональное) здесь - соединить несколько аккаунтов в одну сущность, чтобы им всем показывать то что скрыто от других.