Исключить строку для использования в почте ()

Конечно, при использовании mysql вы используете mysqli_real_escape_string() и убедитесь, что тип mysqli_real_escape_string() ввода – это вид, который вы ожидаете (строка, число и т. Д.), И вы можете быть уверены, что можете использовать вход в mysqli_query() достаточно надежно. .. правильно?

Ну, вопросы:

  • Каков наилучший способ избежать строки, которая будет использоваться в mail() ?
  • Если получатель электронной почты будет адресом электронной почты, введенным в текстовом поле, какие вещи я должен соблюдать, чтобы избежать инъекций или эксплойтов?

У меня есть неплохая идея, как это сделать, но я вникаю в лучшие практики на эту тему, чтобы знать, не хватает ли я чего-то или есть лучший способ.


EDIT: Идея этого вопроса заключается не в том, чтобы иметь ответ, а в том, чтобы составить исчерпывающий список всех вещей, которые нужно позаботиться, когда делаете электронную почту с помощью php. Спасибо всем с помощью до сих пор.

Related of "Исключить строку для использования в почте ()"

Идея внедрения электронной почты заключается в том, что атакующий поток инъекций (LF) в заголовках электронной почты и поэтому он добавляет столько заголовков, сколько захочет. Отключение этих фидов будет защищать вас от этой атаки. Для подробной инфо-проверки http://www.phpsecure.info/v2/article/MailHeadersInject.en.php

Лучшей практикой является использование хорошо написанного, часто обновляемого и широко используемого кода. Для этого я бы предложил использовать PEAR_MAIL ИЛИ Zend_Mail

Если вы не хотите загружать эти модули или вам нужно, чтобы все было очень просто. Вы можете извлечь функциональность фильтрации из этих модулей. Хотя я рекомендую их использовать и часто обновляю библиотеку, чтобы, если новая атака появится в будущем, вам просто нужно будет обновить вашу библиотеку (Pear или Zend), и все будет готово.

Это функция, которая дезинфицирует заголовки в пакете Pear Mail:

 function _sanitizeHeaders(&$headers) { foreach ($headers as $key => $value) { $headers[$key] = preg_replace('=((<CR>|<LF>|0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i', null, $value); } } 

Zend_Mail использует другой фильтр для электронной почты, имени и других полей:

 function _filterEmail($email) { $rule = array("\r" => '', "\n" => '', "\t" => '', '"' => '', ',' => '', '<' => '', '>' => '', ); return strtr($email, $rule); } function _filterName($name) { $rule = array("\r" => '', "\n" => '', "\t" => '', '"' => "'", '<' => '[', '>' => ']', ); return trim(strtr($name, $rule)); } function _filterOther($data) { $rule = array("\r" => '', "\n" => '', "\t" => '', ); return strtr($data, $rule); }