Мне нужно ваше мнение по этому коде для внедрения антиспамового решения:
$string = md5($_SERVER['REMOTE_ADDR']) spam_check его spam_check spam_check извлечь эту $string из значения db & fill out spam_check с ним. $string from db и $_POST['spam_check'] , если они не соответствуют сообщению, это спам … Это хорошая идея? Насколько это безопасно? Очевидным преимуществом является то, что он не требует каких-либо действий от посетителя, например, чтение captcha и т. Д.
Интересно. Я бы с осторожностью подумал об этом как о решении спама / замены кача, но это затрудняет жизнь спамеров.
Однако вам следует планировать рассмотрение случаев, когда javascript отключен (и, возможно, CSS тоже) – например, назначив div для формы, но оставив его с сообщением по умолчанию, а затем записав в него форму с помощью javascript (встроенный, а не ожидающий OnLoad / pageready).
$ string = md5 ($ _ SERVER ['REMOTE_ADDR'])
Это не случайное значение – и оно не изменится. Рассматривать:
$ string = sha1 ($ _ SERVER ['REMOTE_ADDR']. rand (1000) .time ());
(sha1 немного быстрее, чем md5, несмотря на лежащий в основе алгоритм, требующий больше операций).
Было бы неплохо использовать сеанс и:
$ _SERVER ['string'] = sha1 (session_id (). Rand (1000) .time ());
Поскольку эта $string не очень случайна, и запрос AJAX будет видимым для кого-то, кто пытается обойти вашу защиту, легко создать автоматизацию, которая заранее забирает $string а затем запускает газиллиум спам-сообщений на эту форму.
Один из подходов, который мне очень нравится, – это использовать CSS, чтобы скрыть элемент <input type="text"> . Бот не знал бы, скрыт он или нет, и обычный пользователь никогда его не увидит.
Взгляните на этот пост, где эта тема уже широко обсуждается. Практические подходы CAPTCHA, основанные на изображениях.
В любом случае, учитывая ваш реальный вопрос is this a good idea? , Я не могу придумать, почему это не сработает … Я думаю, что часть базы данных не нужна, но есть другие способы, как вы можете видеть по предыдущей ссылке …