Большинство тестов ничего не тестирует.
Вы пишете fileopen () функция и unittest, который перестал работать, если файл не существует и успешно выполняется, если файл действительно существует.Отлично! Теперь Вы проверяли, работает ли это с именем файла в китайцах BIG5? на доле NFS? на перспективе с файлом на флеш-карте и включенном контроле учётных записей?
проблема состоит в том, что модульные тесты записаны тем же программистом, который записал функцию к тому же ряду допущений и с тем же уровнем навыка. Для реальной работы тесты должны быть записаны кем-то еще, только к опубликованным спецификациям без них видящий код. - В большинстве компаний, просто получив записанные спецификации был бы прорыв!
Модульные тесты проверяют ошибки в коде отдельных функций. Они могут работать на уровни доступа к данным, библиотеки математики и т.д., где исходные данные/выводы известны, и внутренняя структура сложна, но для большого количества случаев они - просто пустая трата времени.
Они перестали работать, когда ошибки происходят из-за взаимодействий между различными частями кода или с ОС и пользователем. Проблемы как высокие/низкие настройки DPI, портящие диалоговое окно или установку иностранного языка, подкачивающую a'.' и'', обычно не находятся.
Akismet - хорошая альтернатива, они проверяют ваши сообщения на спам и работают очень эффективно. Вам просто нужно загрузить их библиотеку. http://akismet.com/development/
Я сократил примерно 99% спама на моем веб-сайте с помощью простого математического вопроса, например следующего:
Что такое 2 + 4 [TextBox]
Пользователь сможет отправьте вопрос / комментарий, если они ответят «6».
Подходит для меня, и аналогичное решение работает для Джеффа Этвуда из Coding Horror!
В моем блоге у меня есть своего рода компромиссная капча: я использую капчу только в том случае, если сообщение содержит ссылку. Я также использую поле ввода приманки. До сих пор это было почти 100% эффективным. Время от времени появляется спамер, который отправляет что-то в каждую форму, которая не содержит ссылок (обычно это что-то вроде «хороший сайт!»). Могу только предположить, что эти люди думают, что я отправлю им электронное письмо, чтобы узнать, кто они (используя адрес электронной почты, который вижу только я).
По моему опыту, в настоящее время наиболее эффективными методами являются поля ввода приманки , которые становятся невидимыми для пользователей с помощью CSS (лучше всего использовать несколько различных методов, например, видимость: скрыто, настройка размер 0 пикселей и абсолютное позиционирование далеко за пределами окна браузера); если они все равно заполнены, вы можете считать, что это спам-бот.
В этом блоге описывается довольно сложный метод, который я опробовал сам (пока со 100% успехом), но я подозреваю, что вы могли бы получить тот же результат, пропустив все элементы с хешированными именами полей и просто добавив несколько простых полей-приманок.
Большинство ботов просто заполняют всю форму и отправляют ее вам. Простая уловка, которая работает, - создать обычное поле, которое вы обычно скрываете с помощью javascript. На стороне сервера просто проверьте, заполнено ли это поле. Если так - то это точно спам.
Запрещать ссылки. Без ссылок спам бесполезен.
[РЕДАКТИРОВАТЬ] В качестве среднего пути разрешайте ссылки только на «хорошие» сайты (обычно ваши собственные). Их всего несколько, поэтому вы можете добавить их по запросу пользователей или оставить комментарий, пока не подтвердите ссылку. Когда все будет хорошо, добавьте его.
Через некоторое время вы можете отключить это и автоматически отклонять комментарии со ссылками и ждать, пока пользователи не пожалуются.
вместе с полями медового горшка , мы можем автоматически заблокировать там IP-адреса (что не работает для динамических IP-адресов) и особенно любые ссылки, отправленные ботами.
Вы можете попробовать использовать стороннюю программу, например Akismet . Ключи API бесплатны для личного использования. Кроме того, в Zend Framework есть для этого пакет .
Akismet имеет API. Кто-то написал для него класс-оболочку (лицензию BSD) по адресу: http://cesars.users.phpclasses.org/browse/package/4401.html
Также есть класс байесовского фильтра (также BSD Liscense ) http://cesars.users.phpclasses.org/browse/package/4236.html
1) Добавление информации о сеансе в форму Пример:
<input type="hidden" name="sh" value="<?php echo dechex(crc32(session_id())); ?>" />
затем при обратной передаче проверьте, действителен ли сеанс.
2) Только для Javascript . Используйте Javascript-инъекцию при отправке. Пример:
<input type="hidden" id="txtKey" name="key" value="" />
<input type="submit" value="Go" onclick="document.getElementById('txtKey').value = '<?php echo dechex(crc32(session_id())) ?>';" />
3) Ограничение по времени для IP, пользователя или сеанса . это довольно просто.
4) Случайный выбор имен полей:
<?php
$fieldkey = dechex(crc32(mt_rand().dechex(crc32(time()))));
$_SESSION['fieldkey'] = $fieldkey;
?>
<input type="text" name="name<?php echo $fieldkey; ?>" value="" />
<input type="text" name="address<?php echo $fieldkey; ?>" value="" />
Затем вы можете проверить это на стороне сервера.
Как многие уже предлагали: используйте поле ввода горшочка с медом. Но вам нужно сделать еще две вещи. Во-первых, рандомизируйте имя / идентификатор того поля ввода, которое является горшком с медом. Сохраняйте состояние полезных полей в сеансе (а также токен формы, используемый против CSRF-атак). Например, у вас есть эти поля, чтобы получить: имя, адрес электронной почты, сообщение. В вашей форме у вас будет "token" - ваш токен, "jzefkl46" - название этой формы, "ofdizhae" - для электронной почты, "45sd4s2" - для сообщения и "fgdfg5qsd4" - для горшочка с медом. В пользовательском сеансе у вас может быть что-то вроде
array("forms" => array("your-token-value" => array("jzefkl46" => "name", "ofdizhae" => "email", "45sd4s2" => "message", "fgdfg5qsd4" => honey"));
. Вам просто нужно повторно связать его, когда вы получите данные формы.
Во-вторых, у робота есть много шансов избежать вашего поля с горшком с медом (25 % шансов), умножьте количество горшков. С 10 или 20 из них вы добавляете сложности ботам, не создавая при этом слишком много накладных расходов на ваш HTML.
Другой распространенный подход - задать пользователю простой вопрос ("это огонь горячий или холодный? »« сколько 2 плюс 7? »и т. д.). Это немного капча- , как , но она более доступна для пользователей с ограниченными возможностями зрения, использующих программы чтения с экрана. Я думаю, что должен быть плагин WordPress, который делает это, потому что я очень часто вижу это в блогах WordPress.
Есть еще теория горшочка с медом. Мне нравится комбинировать медовые горшочки с другими формами сокращения спама для достижения наилучших результатов.
Конечно, наивные беесовские фильтры:
http://blog.liip.ch/archive/2005/03/30/php-naive-bayesian-filter.html
ознакомьтесь с некоторыми плагинами антиспама wp для примеров и ideas
есть много хороших антиспамов без использования captcha.
некоторые я бы порекомендовал: hashcash, nospamnx, антиспам с клавиатуры. all these using different methods blocking spam and i use them all. hashcash+nospamnx block almost all spambot. and typepad antispam block most human typed spam.
these are also good ones: spambam, wp-spamfree, anti-captcha, bad-behaviour, httpbl, etc
also with simple .htaccess that block any bot direct POST that do not come from your own site (check referer)
or, simply outsource your comment system to disqus and sleep tight.
Sblam! является открытым исходным кодом фильтр похож на Akismet.
Он использует наивную байесовскую фильтрацию, проверяет IP-адрес отправителя и ссылки в нескольких распределенных черных списках, проверяет правильность HTTP-запросов и использует присутствие JS в качестве подсказки (но не требования).