Вы можете защитить свою форму с помощью клавиш формы техники:
- При отображении формы для пользователя, сгенерировать случайный идентификатор («форма ключа») только для этой единственной формы представления. Сохраните ключ формы в переменной сеанса. Отправьте «ключ формы» в скрытое поле ввода.
- На стороне отправки проверьте представленную форму формы напротив той, которая хранится в переменной сеанса. Немедленно аннулировать его после использования. (Удалить его из сеанса)
Без искаженным или что-то сравнимого, что невозможно действительно защитить форму от злоупотреблений.
Однако, используя эту технику, злоумышленник спамер бы
- запрос о форме через HTTP для каждого отдельного представления формы, чтобы получить действительный уникальный forkey
- разбора DOM дерево/HTML код, чтобы получить форма ключа
- представить его в правильном формате
нет автоматической рассылку спама формы контакта гусеничного не делает это, насколько я знаю.
Этот метод также защищает вашу форму от нескольких закрытых представлений.
Вот пример кода:
<?php
session_start();
if (isset($_POST['form_submit'])) {
// do stuff
if (isset($_POST['formkey']) && isset($_SESSION['formkeys'][$_POST['formkey']])) {
echo "valid, doing stuff now ... "; flush();
// delete formkey from session
unset($_SESSION['formkeys'][$_POST['formkey']]);
// release session early - after committing the session data is read-only
session_write_close();
// do whatever you like with the form data here
send_contact_mail($_POST);
}
else {
echo "request invalid or timed out.";
}
}
else {
// show form with formkey
$formkey = md5("foo".microtime().rand(1,999999));
// put current formkey into list of valid form keys for the user session
if (!is_array($_SESSION['formkeys']) {
$_SESSION['formkeys'] = array();
]
$_SESSION['formkeys'][$formkey] = now();
?>
<html>
<head><title>form key</title></head>
<body>
<form method="POST">
<input type="hidden" name="PHPSESSID" value="<?=session_id()?>">
<input type="text" name="formkey"
value="<?= $formkey ?>">
<input type="submit" name="form_submit" value="Contact us!">
</form>
</body>
</html>
<?php } ?>
Проверяйте правильность проверки на сервере, а также на стороне клиента и выполняйте почтовые функции, не сохраняйте в БД –
Защитите от чего? Если это спам-боты, тогда цель CAPTCHA - рассказать ботам от людей, поэтому все механизмы защиты ботов подпадают под этот термин. –
Связанные: http://stackoverflow.com/questions/2603363/good-form-security-no-captcha –