Недавно доделал и опубликовал свой сайт, делал его с нуля, не зная PHP и естественно имеются недочёты. Сейчас меня интересует защита от спама в комментариях. На большинстве страниц есть форма для отправки комментариев, выглядит она таким образом: Естественно капча тут говорит сама за себя, т.е. говорит о полном отсутствии капчи, имхо такую любой робот обойдёт. Вопрос в том - как сделать проверку на определённые символы или слова ? Хочу, что бы допустим если посетитель решит оставить ссылку и впишет в форму какой нибудь адресс http://www.php.ru/ , проверка не давала опубликовать и занести в базу сообщения которые содержат http:// и href=. Подскажите как это реализовать. На данный момент у меня в файле проверки используются только trim, stripslashes и htmlspecialchars.
ну если задача стоит тупо убрать http из строчки то вот =) http://ru2.php.net/manual/ru/function.str-replace.php если нужна хорошая капча, то гугл тебе в помощь - их полно по сети лежит если же хочешь сделать хорошую фильтрацию то опять же вспоминаем про гугл http://www.google.ru/search?q=php+%D1%8 ... nt=firefox
Еще такой вариант PHP: <?php error_reporting (E_ALL); $string = 'bla-bla <a href="http://www.google.com/">bla-bla</a>'; $string = strip_tags ($string); echo $string; // bla-bla bla-bla , советую посмотреть также это http://ua2.php.net/manual/en/book.filter.php
Мне не убрать надо а проверить, если в строке присутствует http тогда не заносить информацию в базу. Спасибо за ссылки и варианты - изучаю. Если есть ещё варианты, пишите - хочу рассмотреть все возможные. Капча пока пусть такая повисит - со временем заделаю как надо ))
Если нужно узнать есть ли в комментарии ссылки, то достаточно воспользоваться стандарными функциями PHP для поиска подстроки в строке, если же нужно узнать есть ли какой-либо HTML-код в комментарии, то что-то вроде такого PHP: <?php error_reporting (E_ALL); $string = 'some text with unsafe HTML like <script>tra-ta-ta</script> or <a href="bla-bla">bla-bla</a>'; if (preg_match ('/<(.*?)>(.*?)<\/(.*?)>/is', $string, $matches)) die ('Unsafe string!'); , что можно расширять при необходимости, также стоит дополнительно делать фильтрацию, на всякий случай
сейчас прописал PHP: strip_tags теги не проходят, но если человек просто впишет адрес, допустим http://www.php.ru/ как сделать проверку на наличие слова http ? не могли бы вы дать комментарии к каждой строке ? PHP: <?php error_reporting (E_ALL); $string = 'some text with unsafe HTML like <script>tra-ta-ta</script> or <a href="bla-bla">bla-bla</a>'; if (preg_match ('/<(.*?)>(.*?)<\/(.*?)>/is', $string, $matches)) die ('Unsafe string!'); просто я новичок в этом деле и много ещё не знаю. Буду очень признателен.
У меня в обработчик "прилетает" переменная $text в которой допустим есть следующее содержание спама: "заходите на мой сайт http://мойсайт.ru/ там много интересного" - как сделать проверку на наличие http:// в сообщении и отказать в его публикации? Надо сделать как то так: если в переменной $text присутствует слово http:// уничтожить эту переменную, дальше у меня идёт проверка на несуществующую переменную и выводится сообщение о том что что то не так. как проверить сообщение ?
PHP: <?php error_reporting (E_ALL); $string = 'bla-bla [url=http://www.google.com/]http://www.google.com/[/url] bla-bla'; if (strstr ($string, 'http://')) $string = ''; Можно было бы посмотреть ссылку, которую я дал выше, к тому же, по тому адресу написано все на русском...