Потенциальная дыра-2: Отправка письма в слежбу поддержки

Ms

Новичок
Потенциальная дыра-2: Отправка письма в слежбу поддержки

Передположим, на сайте суущесвует форма для отправки писем в службу поддержки.
Форма распроложена по адресу: www.site.ru/mail/
Неважно, каким методом отсылаются данные, ибо хочется рассмотреть оба варианта.

Выгядит это слудующим образом:
PHP:
<form>
Текст письма:<br />
<textarea name="message"></textarea>
<input type="submit">
</form>
<?php
if(!empty($_REQUEST['message'])){

	$headers  = "MIME-Version: 1.0\r\n";
	$headers.="Content-Type: text/plain; charset=windows-1251\r\n";
	$headers .= "Date: ".date("m.d.Y (H:i:s)",time())."\r\n";
	$headers .= "From: ГОСПОДИН N\r\n";

	mail('[email protected]','ЗПисьмо в службу поддержки',$_REQUEST['message'],$headers);
}
?>

А теперь собственно, о проблемме этого движка.
1) Если данные отсылаются мтодом GET, то [email protected] может быть очень скоро завален сотнями тысяч писем следующим скриптом:
PHP:
<?php
for($i=0;$i<=100000; $i++){
file_get_contents('http://www.site.ru/mail/?message=Дыра в защите сайта');
//умышленно не пишу urldecode
}
?>
Короче говоря, отсылать письмо методом GET - утопия.
2) Если данные отправляются методом POST, то:
a) Возможно ли как-либо послать данные методом POST, любым другим путём, кроме формы на web-странице? Причём, рассматриваются не только

возможности PHP, но и всей POST-системы в целом.Если да, то это не есть очень хорошо.

б) Если можно, то как сделать так, чтобы не получилось приблизительно такой же картины, как с методом GET?
 

Cougar

Кошак
1. Использовать метод GET для подобных задач - бред. Вместо $_REQUEST пользуй $_POST
2.1. Возможно, и очень легко.
2.2. А подумать? Если я не хочу, чтобы форма сабмитилась 100 раз в секунду - я ограничиваю частоту сабмитов, скажем, один раз в 30 секунд с одного айпи. нужен пример? Пжалста - попробуй на этом форуме отправить два сообщения подряд.

Ну, и дополнительно: HTTP_REFERER + куки (что, конечно, не панацея, но помогает)
 

Ms

Новичок
1. Использовать метод GET для подобных задач - бред. Вместо $_REQUEST пользуй $_POST
Это и есть вывод из первог пункта

2.2. А подумать? Если я не хочу, чтобы форма сабмитилась 100 раз в секунду - я ограничиваю частоту сабмитов, скажем, один раз в 30 секунд с одного айпи.
Я, конечно, могу ошибаться, нно, по-моему, есть такое понятие как "генерация ip". =>Это не выход

нужен пример? Пжалста - попробуй на этом форуме отправить два сообщения подряд.
Форум-это всё-таки другое.Тут, товарища, который нафлудил, могут забанить. Он, опять пойдёт забить e-mail, зарегистрироваться,его опять забанят. Скоро ему это надоест. Всё что он нафлудил будет удалено.

Форма для отправки писем - нечто иное.
Никто не погнушается раз в день запустить скрипт, прибавляющий 10'000 к счётчику писем получателя.

Я, конечно, могу ошибаться, но, по-моему, нельзя опираться на эту переменную, (не знаю почему). Поправьте меня, если не прав.

Ну так, это уже просто несерьёзно.
Да и нельзя лишить возможности написать письмо людей, которые отключают куки
 

Crazy

Developer
Re: Потенциальная дыра-2: Отправка письма в слежбу поддержки

Автор оригинала: Ms
Короче говоря, отсылать письмо методом GET - утопия.
Здесь использование POST является обязательным. Но вовсе не по описанным тобой причинам, а по причинам, описанным в RFC по HTTP.

Если данные отправляются методом POST, то:
...можно зафлудить практически столь же легко.

Ты копаешь не в ту сторону.
 

Cougar

Кошак
Автор оригинала: Ms
Это и есть вывод из первог пункта
Не только.

Я, конечно, могу ошибаться, нно, по-моему, есть такое понятие как "генерация ip". =>Это не выход
Тогда отправка формы должна происходить только после авторизации. А регистрация пользователей утверждается вебмастером.
Дело в том, что абсолютной защиты не существует - важен баланс между защищенностью и удобством.

Форум-это всё-таки другое.Тут, товарища, который нафлудил, могут забанить. Он, опять пойдёт забить e-mail, зарегистрироваться,его опять забанят. Скоро ему это надоест. Всё что он нафлудил будет удалено.

Форма для отправки писем - нечто иное.
Никто не погнушается раз в день запустить скрипт, прибавляющий 10'000 к счётчику писем получателя.
Неужели так сложно чуть-чуть подумать? Сохраняем (неважно, где) айпи отправившего форму и время отправки формы. Если в течение 30 секунд с этого айпи пытаются отправить форму - ругаемся. Да что я распинаюсь-то? В сети навалом примеров.


Я, конечно, могу ошибаться, но, по-моему, нельзя опираться на эту переменную, (не знаю почему). Поправьте меня, если не прав.
Прав. Но тем не менее - это бывает полезно.

(про куки)
Ну так, это уже просто несерьёзно.
Да и нельзя лишить возможности написать письмо людей, которые отключают куки
Почему несерьёзно? Если кука не установлена - значит, можно. Если установлена - значит, нельзя.
 

Ms

Новичок
Тогда отправка формы должна происходить только после авторизации
Нет, это уже чересчур - я не буду заставлять авторизироваться человека, который из доброты душевной решил зайти на страницу отправки письма и написать свои пожелания.
Дело в том, что абсолютной защиты не существует
К этому постепенно прихожу.

Неужели ты думаешь, что человек, который написал 50 строк кода для того, чтобы нагадить, не позаботится о том, чтобы отключить КУКИ, скачать прогу для генерации ip, или подделать HTTP_REFERER?
 

Cougar

Кошак
Автор оригинала: Ms
Нет, это уже чересчур - я не буду заставлять авторизироваться человека, который из доброты душевной решил зайти на страницу отправки письма и написать свои пожелания.
Вот и я о том же :) Важен баланс между защитой и удобством.


Неужели ты думаешь, что человек, который написал 50 строк кода для того, чтобы нагадить, не позаботится о том, чтобы отключить КУКИ, скачать прогу для генерации ip, или подделать HTTP_REFERER?
тогда суши вёсла. От DDOS-атаки защиты не существует (разве что отключить сервер от сети)
 

Ms

Новичок
Crazy
Судя по всему, ты человек не глупый.
Неужели никак нельзя защитить себя от
ДЫРЫ "Отправка ПИСЕМ В СЛУЖБУ ПОДДЕРЖКИ".

Просто, такие формы я видел, на многих очень крупных сайтах (www.canon.ru), и считаю, что быть такого не может, что эти сайты не защищены от простейших атак.
 

Paxan

Новичёк
Есть еще вариант ввода цифр/букв с картинки перед сабмитом формы. Много где используется. Как по мне, то самый простой и удобный.
 

Ms

Новичок
Paxan
епрст, как я сразу не догадался...
большое спасибо
блин, я уже воторой день об этом думаю, решил написать на форум, а тут....
 

Paxan

Новичёк
Надо задачу чётко ставить, а не летать в высоких материях о GET и POST.
 

Crazy

Developer
Автор оригинала: Ms
Неужели никак нельзя защитить себя от
ДЫРЫ "Отправка ПИСЕМ В СЛУЖБУ ПОДДЕРЖКИ".
Читай мое предыдущее сообщение, пока не поймешь его смысл.
 
Сверху