Как запретить спамерам вводить http в форму в базу данных - PullRequest
7 голосов
/ 18 марта 2010

У меня есть форма, которая отправляет информацию в таблицу базы данных. Я проверил это с помощью Javascript, но как лучше всего запретить спамерам вводить http и т.п. в базу данных с помощью PHP, когда Javascript выключен?

Ответы [ 5 ]

6 голосов
/ 18 марта 2010

Вы можете реализовать CAPTCHA в форме:

http://en.wikipedia.org/wiki/CAPTCHA

Редактировать : Также обязательно проверяйте данные формы на стороне сервера и, как обычно, проверяйте HTML-теги и т. Д., Но CAPTCHA должен помочь против автоматических спам-атак.

3 голосов
/ 18 марта 2010

Вы можете использовать CSRF-защиту , чтобы предотвратить спамеров, я нашел это довольно эффективным.

Что это такое и как это работает

Еще один хитрый способ - включить поле «honeypot» - скрытое поле, которое никогда не следует отправлять с контентом. Если он заполнен, вы знаете, что это спам. Ни один из этих методов не требует раздражающей капчи.

3 голосов
/ 18 марта 2010

Никогда не доверяй клиенту. Всегда проверяйте все данные на стороне сервера. JavaScript для проверки формы может быть просто дополнительной функцией. Вы можете начать с базовых функций PHP, чтобы проверить, содержит ли контент определенные строки, которые вам не нравятся, например. «http://".

if (strpos('http://', $_POST['message']) !== false) { /* refuse */ }
2 голосов
/ 18 марта 2010

Необходимо учитывать две вещи, которые должны быть реализованы параллельно (может быть, есть и больше).

  1. Капча (как упоминалось ранее)
  2. Проверьте ваши данные на стороне сервера! Вы написали, что вы делаете это с помощью JavaScript. Это хорошо, но тот же процесс проверки должен быть написан на PHP.

Ну, для CAPTCHA вам все равно придется проверять его на стороне сервера. Но даже если вы решите не внедрять капчу, вы должны выполнить проверку данных на стороне сервера.

0 голосов
/ 18 марта 2010

Я предлагаю использовать функцию htmlentities() перед выполнением вставки.

Очевидно, что ваша вставка должна выполняться с использованием параметризованных запросов , чтобы также взаимодействовать с базой данных. Капча, конечно, вариант, но он больше ограничивает как часто кто-то может публиковать, а не что они могут публиковать Используйте hmtl escape (опять же, htmlentities() функция), чтобы запретить пользователю вводить то, что вам не нужно.

...