Pull to refresh

Comments 10

> Во время фаззинга было установлено, что Python встретив символы из диапазона %80-%FF возвращает сообщение об ошибке (аля раскрытие… и бла-бла):

В джанго, например, в дефолтных продакшн-настройках пользователю при любой ошибке покажет error 500, а администратору уйдет подробное письмо с трейсбеком, состоянием сервера и парамерами запроса. Голый питон в cgi-исполнении встречается не чаще, чем bash, думаю.
Я в том смысле, что кроме как error 500, никаких вменяемых данных атакующий не увидит.
Я не понял почему вы покрасили вывод PHP в розовый и красный? Почитайте мануал к языку.

a[]=1&[]=2 означает $a=array(1,2);

и все левые символы заменяются на подчёркивание. Ничего необычного. А код ваш на PHP лучше заменить на var_dump($_GET);
особенность с приведением типов можно использовать при автоматизированном фазинге, например, при обнаружении параметров, «спрятанных» за mod_rewrite
По поводу PHP — бояться нечего. В этой статье не приведено ни одной уязвимости для PHP.

> Первой особенностью PHP атакующий может воспользоваться с целью обхода различного рода ограничений (например, при неявном сравнении переменных), а также с целью принудительного вывода сообщения об ошибке (аля раскрытие корневого каталога веб-сервера). Вторая особенность PHP позволяет обратиться к сценарию через веб-сервер и передать ему параметры, которые сценарий принимает из командной строки.

Во-первых, про возможность передачи array в _GET знает любой разработчик, хоть раз читавший мануал. Это не уязвимость, а специально предусмотренная особенность (чтобы передать например состояние группы чекбоксов). Во-вторых, любой уважающий себя разработчик не читает данных напрямик из _GET, а если читает, то приводит их к string или int. Ну и «path disclosure» не прокатит — на production-серверах вывод ошибок идет в лог.

Насчет загрязнения argv — это не баг, а особенность протокола CGI. Вы бы теорию почитали :) Query string передается как аргумент командной строки скрипту.

А mod_security — не нужен, так как это тупой примитивный фильтр по словам/выражениям, который не способен распознавать и анализировать паттерны атак. Он даже учиться не умеет.
>> Насчет загрязнения argv — это не баг, а особенность протокола CGI. Вы бы теорию почитали :) Query string передается как аргумент командной строки скрипту.

Я и не говорил, что это баг. Это особенность («фича»). Нужно сказать, что только PHP переполняют подобного рода особенности, как-то неявное приведение типов или получение консольных данных через HTTP ;)

>> А mod_security — не нужен, так как это тупой примитивный фильтр по словам/выражениям, который не способен распознавать и анализировать паттерны атак. Он даже учиться не умеет.

Не согласен. Да, тупой, да, примитивный, но откровенно говоря является промышленным решением и позволяет существенно снизить использование основных уязвимостей в веб-приложениях…
> Нужно сказать, что только PHP переполняют подобного рода особенности, как-то неявное приведение типов или получение консольных данных через HTTP ;)

Подобные особенности переполняют любой пограммный продукт, являющийся CGI-сервером или совместимым с ним. Вы бы мой комментарий внимательно прочли — это протокол CGI а не фича именно PHP.

А неявное приведение типов даже в Си есть, и никто пока от этого не умер — достаточно о нем знать и не писать двусмысленные конструкции.
Кстати, как погляжу Perl выгляди как самый адекватный с его библиотекой CGI.
Кстати, да param[] это нормально и не только в PHP, многие формы даже заполняются специально user[name], user[email] чтобы удобно собрать данные. И жаль, что вы не проверили Ruby.
Only those users with full accounts are able to leave comments. Log in, please.