Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Защита формы e-mail
 
 автор: Anchi   (24.11.2005 в 18:59)   письмо автору
 
 

На сайте стоит простая форма отправки сообщений на e-mail. Удаленный пользователь пытается использовать ее (либо напрямую обработчик) в качестве инструмента для осуществления спам-рассылки через сервер хостера. И хотя из-за ограничений хостера она не осуществляется, но попытки идут, нагружая, по всей видимости, сервер хостера.
Вопрос. Если кто сталкивался, то какие методы защиты обработчика будут наиболее действенными?

   
 
 автор: Shorr Kan   (24.11.2005 в 19:11)   письмо автору
 
   для: Anchi   (24.11.2005 в 18:59)
 

Защиты от чего? И кого?

   
 
 автор: Anchi   (24.11.2005 в 19:26)   письмо автору
 
   для: Shorr Kan   (24.11.2005 в 19:11)
 

Защита обработчика формы от возможности осуществления через него массовых спам-рассылок. А от кого не столь важно, здесь может быть любой спаммер.

   
 
 автор: goddamn   (24.11.2005 в 19:30)   письмо автору
 
   для: Anchi   (24.11.2005 в 19:26)
 

а форму можно увидеть? ну и до кучи скрипт-обработчик. так быстрее разберемся

   
 
 автор: Anchi   (24.11.2005 в 19:56)   письмо автору
 
   для: goddamn   (24.11.2005 в 19:30)
 

Форма:
<FORM action=mail.php method=post>
* Ф.И.О.: <INPUT style="width:100px" name=fio maxlength=50><br>
* Город: <INPUT style="width:100px" name=city maxlength=30><br>
* E-mail: <INPUT style="width:100px" name=email maxlength=30><br>
* Ваши комментарии:<br>
<TEXTAREA name=comment rows=6 style="width:273px"></TEXTAREA><br>
<INPUT type="submit" value="Отправить" name="ok">
<INPUT type=reset value="Очистить" name=B2>
</FORM>


Обработчик:
<?
$mailto="e-mail";
if (empty($ok))
{
?>

<?
}
else
{

$subject="От $fio";
$body="Ф.И.О.:\n$fio\n\nГород:\n$city\n\n
Сообщение:\n$comment\n\n\nIP-адрес:$REMOTE_ADDR";
$sucess = mail($mailto, $subject, $body, "From: $email\nX-Mailer: PHP/" . phpversion());

if ($sucess)
{
echo "<font color=Darkgreen>Спасибо. Сообщение отправлено!</font><br><br>";
echo "<a href='javascript: self.close()'>Закрыть окно</a>";
}
}
?>

Обязательность заполнения полей проверяется JS, но код не привожу, так как погоды это не делает.

   
 
 автор: Shorr Kan   (24.11.2005 в 20:20)   письмо автору
 
   для: Anchi   (24.11.2005 в 19:56)
 

Самый стандартный вариант защиты - формирование случайного порядка букв и цифр, и вывод их - или через графические функции, или же - в случайном порядке. То есть, текстовым вариантом, но окружение должно быть разнообразным - теги <b> , <i>, и прочее, прочее, прочее. Например, можете когда-то тире выводить и писать: "Введите коде С тире", а в другие моменты: "введите код БЕЗ тире".
Разумеется, сформированный код - человек должен ввести в input-поле.

   
 
 автор: Anchi   (24.11.2005 в 20:46)   письмо автору
 
   для: Shorr Kan   (24.11.2005 в 20:20)
 

Значит все-таки генерация... :) Столько чести для такой формы... :) Спасибо Shorr Kan.

   
 
 автор: cheops   (25.11.2005 в 00:16)   письмо автору
 
   для: Anchi   (24.11.2005 в 20:46)
 

Можно поместить в скрытое поле уникальный идентификатор сессии $SID - если идентификатор переданный через форму и текущий не совпадают - не оправлять письмо. Правда если робот поддерживает cookie - это можно обойти. Хотя процентов 70% злоумышлеников этим можно отсечь.

   
 
 автор: Anchi   (25.11.2005 в 03:30)   письмо автору
 
   для: cheops   (25.11.2005 в 00:16)
 

cheops. В описанном мною случае, спаммер пытается через обработчик осуществить рассылку своего письма на много-много адресов эл. почты. Попытки сразу фиксируются почтовым логом хостера, отсюда, вполне вероятно, могут быть санкции и т.д. Т.е. по идее пресекать нужно возможность отправки письма на множество e-mail адресов. Вот такое направление.

   
 
 автор: cheops   (25.11.2005 в 13:45)   письмо автору
 
   для: Anchi   (25.11.2005 в 03:30)
 

Он для это изменяет почтоый заголовок - использует Bcc (вроде нет такой возможности) или просто осуществляет слишком частые обращения к обработчику, отправляя по одному письму за раз? Если последний случай, можно помещать IP-адрес и время использования сервиса в таблицу MySQL или файл, а при последующей отправке проверять имеется ли такой адрес в таблице, если имеется ничего не отправлять. При загрузке HTML-формы следует осуществлять уничтожение записей, которые старше 10 минут. 10 минутной задержки между отправкой сообщений за глаза хватит, чтобы заставить спамера искать другую жертву. А пользователей можно честно предупредить, что следующее письмо можно отправить только через 10 минут. Причём если у спамера очень большая база - ему и несколько секунд будут критичны, кроме того он не будет знать какие письма отправились, а какие нет.

PS Причём лучше поторопиться с решением этой проблемы - за спам у хостера могут быть большие неприятности - он может либо открыто, либо (что хуше) в тихоря ввести какое-нибудь ограничение для вас при работе с почтой.

   
 
 автор: Anchi   (25.11.2005 в 17:16)   письмо автору
 
   для: cheops   (25.11.2005 в 13:45)
 

На мой адрес приходят уведомления, т.е. "в темную" обработчик не используется, иначе я узнал бы о таких попытках только от хостеров. Обращения к обработчику не слишком частые, но практически каждодневные (в основном ночью с интервалом 1,5-2 часа). IP-адрес все время разный. Скорее всего используется удаленная форма (не с сайта) просто с моим action, так как мои логи не показали присутствия этих IP-адресов на сайте в моменты отправок.
Получается, что блокировка по IP теряет актуальность, а вот время использования...но тоже вопрос, мы ведь не знаем размер базы и скорость... Тут шансов ему давать совсем нельзя, было бы в самую точку жесткое ограничение на кол-во адресов отправки, чтобы этот момент нельзя было обойти..

С P.S. полностью согласен. По этой причине форму пока убрал (вместе с обработчиком), оставив лишь мыло.

   
 
 автор: cheops   (26.11.2005 в 12:23)   письмо автору
 
   для: Anchi   (25.11.2005 в 17:16)
 

Прошейте форму сессией - т.е. поместите в скрытое поле $SID и проверяйте при отправке почты равен ли SID в форме текущему идентификатору - если злоумышленик не знает протокол HTTP и испытывает трудности с программированием - обойти эту защиту ему будет трудно.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования