2010-06-09 3 views
4

У меня есть сайт для объявлений, и внутри каждого из них есть небольшая форма.php Mail function; Это безопасный способ?

Эта форма предназначена для пользователей, чтобы иметь возможность наклонить их «друзей»:

<form action="/bincgi/tip.php" method="post" name="tipForm" id="tipForm"> 
Tip: <input name="email2" id="email2" type="text" size="30 /> 
<input type="submit" value="Skicka Tips"/> 
<input type="hidden" value="<?php echo $ad_id;?>" name="ad_id2" id="ad_id2" /> 
<input type="hidden" value="<?php echo $headline;?>" name="headline2" id="headline2" /> 
</form> 

Форма затем представлен на странице tip.php, а вот мой Q, это ниже код безопасным, т.е. это достаточно хорошо или мне нужно сделать некоторые санитарные условия и более подробную информацию о безопасности?

$to = filter_var($_POST['email2'], FILTER_SANITIZE_EMAIL); 
    $ad_id = $_POST['ad_id2']; 
    $headline = $_POST['headline2']; 

    $subject = 'You got a tip'; 

    $message ='Hi. You got a tip: '.$headline.'.\n'; 

    $headers = 'From: [email protected]\r\n'; 
    mail($to, $subject, $message, $headers); 

Я еще не протестировал вышеуказанное.

ответ

0

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

+0

Ответа на этот вопрос по "let them send handful" Вы имеете в виду пользователей? Как я могу контролировать, сколько они отправляют? Вы имеете в виду проверку ip и разрешение x количества писем на IP-адрес? Будет ли это безопасно против спам-ботов? –

+0

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

+0

Помогите указать мне в правильном направлении, как ограничить количество советов для отправки каждым пользователем? Должен ли я вести запись об этом в отдельном файле или как вы это сделаете? –

0

Это хорошая идея для дезинфекции входа, прежде чем использовать его. Проверьте, чтобы две постпеременные были в правильном формате (например, только текстовые или цифровые (с использованием Regex или is_numeric и т. Д.)

0

Похоже, что у вас есть XSS в $ad_id = $_POST['ad_id2']; и $headline = $_POST['headline2'];.

Существует проблема с безопасностью mail(). Вы должны быть осторожны с инъекцией CRLF \r\n в $ headers. в этом случае $ headers не контролируется атакующим, поэтому вам не о чем беспокоиться. Еще один момент, хотя его названная инъекция CRLF, также можно назвать инъекцией LF, потому что новая строка - это все, что вам действительно нужно, потому что SMTP - это прощающий протокол.

1

Вы прошли $ad_id и $headline в HTML, только если он прошел прямо обратно, без изменений. Поскольку ad_id и заголовок не редактируются в форме, не ставьте их на форму, держите их на сервере. Это самый безопасный.

0

Если $headline исходит из вашей собственной базы данных, я бы не помещал текст в скрытое поле, а id заголовка и извлекал фактический текст из базы данных перед отправкой почты.

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

Смежные вопросы