В PHP 5.2.1 и 5.2.0 обнаружена возможность (http://www.securityfocus.com/bid/23359) вставки символа новой строки через email адрес переданный в функцию отправки сообщения. Ошибка в regex выражении для проверки валидности email адреса в фильтре ext/filter (функция filter_var с параметром FILTER_VALIDATE_EMAIL), позволяет добавить дополнительные заголовки в тело письма, что может быть использовано для массовой рассылки спама через различные web-формы.
Проблема связана с отсутствием D модификатора в сочетании с символом проверки конца строки $ (если поставить \n - то выражение после \n не попадет в область видимости регулярного выражения) в PCRE выражениях используемых в ext/filter, также отмечается, что ошибка типична для большого числа скриптов в которых используется функция preg_match().URL: http://www.securityfocus.com/bid/23359
Новость: http://www.opennet.me/opennews/art.shtml?num=10401
Уже даже не смешно.
Как они уже заеб..ли уже со своими дырами, а.
Хм.. для этой уязвимости необходимо чтобы выполнились условия1. PHP 5.2.x
2. Использование фильтров для проверки email.Зная это очень легко устранить эту уязвимость.
На сегодняшний день. Очень немногие используют эту версию.
+1
Хотя, безусловно, новость - не из приятных.
Супер. :-)
Честно говоря я не очень понял в чём заключается уязвимость такая прям страшная. Ну да ... согласен:
<?
$var = "test@example.com\n";
var_dump(filter_var($var, FILTER_VALIDATE_EMAIL));
?>
Действительно не возвращает false - а ДОЛЖНО было бы. Но зато:
<?
$var = "test@example.com\nCc:test@example.com";
var_dump(filter_var($var, FILTER_VALIDATE_EMAIL));
?>
Уже возвращает false, да и вообще если после "\n" хоть что-то написать - возвращает false.Так в чём заключается уязвимость, которая открывает такие широкие ворота спамерам? Объясните кто-нибудь? :)
Я так понял, что после \n можно скрипт хитрый напихать и он выполнится.
О фильтрах ещё даже мало кто знает пока, не говоря уже об использовании.
А что мешает использовать собственный валидатор? Религия не позволяет? Как правило у любого нормального программиста через пару месяцев есть готовые валидаторы практичекси на всё к тому же отлаженые. Уязвимость для script-kidy программистов, своё писать надо, а не доверять существующему. В особо критичных случаях можно и нужно перепроверять получателя по SMTP.
А еще через пару месяцев, когда программист становится НОРМАЛЬНЫМ он прекращает использовать PHP (ака Basic for WEB) совсем.
> А что мешает использовать собственный валидатор? Религия не позволяет?Esli kazhdiy budet pisat' sobstvenniy validator mi daleko ne uidem v etom mire :)
> В особо критичных случаях можно и нужно перепроверять получателя по SMTP
A vot eto voobche durnoy ton. "перепроверять" nikogda nichego ne nuzhno. Nuzhno "proveryat'" odin raz, i navsegda :) Ne doveryaete biblioteke? Voz'mite druguyu.
Больше всего меня улыбает читая новости на опеннете, это очередные вести о дырках. Прочитав в рссах заголовок новости, тут же кинулся посмотреть, что скажут пхписты. Первый коммент выразил я думаю всеобщее настроение))
Коллеги, просвятите плз - это на mod_php как-то распостраняется?
Одним смешно, другим не смешно. :) :(
http://www.google.com/codesearch?q=FILTER_VALIDATE_EMAIL&hl=...
Проблема вообще мизерная. Проектов которые юзают jelix, мало. Сайтов написанных на Solar тоже. Домашние поделки по определению не используют эту фичу.
А ты preg_match ищи: Results 1 - 10 of about 49,300.FILTER_VALIDATE_EMAIL лишь одно проявление глобальной проблемы, которая больше с криворукостью связана, чем с PHP.
На perl тоже полно штучек, очень часто пишут /$user_var/ вместо /\Q$user_var\E/. Если в $user_var подставить "?{ system(qw(ls -al /)); }" будет "Ой".
>FILTER_VALIDATE_EMAIL лишь одно проявление глобальной проблемы, которая больше с криворукостью связана, чем с PHP.Вполне согласен, достаточно просто от этого защититься:
filter_var(trim($var), FILTER_VALIDATE_EMAIL);И все проблемы как рукой снимет.
filter_var это такое нововведение в PHP5?