VarTryer v. 1.0 [console] Скрипт для быстрой проверки php-скриптов на баги [фаззер] 1. Принцип работы Запускаем скрипт, по подсказкам вводим нужные данные. Запрашивается хост (например, localhost). Запрашивается путь к проверяемому файлу и сам файл (например, /files/doc/index.php) и запрашивается путь и файл, в котором хранятся переменные, которые будут участвовать в проверке($ перед переменной обязательно, например $variable). Пример файла с переменными После чего, подсчитывается количество переменных и соответственно делаются запросы(POST, GET, COOKIE) к скрипту с каждой переменной, например Далее получается ответ от сервера (если в теле полученного документа есть слово error или warning, то тут же на экран выводится извещение и запрос при котором, была получена ошибка) подсчитывается размер ответа. Создается массив с размерами ответов сервера. Далее, высчитывается математическое ожидание размера ответа, дисперсия и среднеквадратическое отклонение. И идёт выборка "странных" значений размера ответа. Выводится схематический текстовый график вероятности выпадения размеров и справа список параметров. Ниже выводится список "странных" размеров с методом и переменной, при которой этот ответ был получен. 2. Требования Код написан на php с ООП(собственно, учился ООП тут =)). Требуется php5+ и включенные сокеты. 3. Назначение 1)Быстрый анализ локального php-скрипта на баги. Ставим проверяемый скрипт на сервер. Вводим хост и путь к файлу. На запрос пути к файлу с переменными указываем тот же файл, что висит на сервере. Скрипт пропарсит проверяемый файл на переменные и далее пойдет проверка. 2)Удаленный анализ на php-баги. Указываем удаленный хост и путь к сприпту. Указываем путь к файлу с набором переменных. Смысл в том, что если на проверяемом хосте включен register_globals = on и в скрипте есть ошибки, связанные с переменными, то скрипт их должен выявить. 3. Установка Весь скрипт состоит из главного файла и нескольких подключаемых классов. Надо лишь разархивировать архив в одну папку. (с) AFoST 10.02.2009 4:10
Вообщем то утопия, я такое патылся сделать , но в итоге понял чтоэто возможно сделать только разобрав php и прикрутить в каждую функцию некоторый код. То есть сделать что то типа дезендера , но с другим уклоном, попытки сделать это в других языках не имеет смысла. Так как надо не просто парсить скрипт и вызывать с разными параметрами, а трасировать его выполнение, чтобы видеть как меняются значения так сказать динамических переменных.
Ты имеешь в виду динамический анализатор, это не то, что выложил ТС. (Кстати динамический анализатор вполне реально и интересно было бы разрботать) А по поводу этого конкретного скрипта, можно делать как всякие ХСпайдеры, и прочие SSS: Т.е. собирать на страницах все линки, все формы и просто экспериментировать с установкой из значений (просто обычный фаззинг). P.S. То что сделал ТС смахивает на мой статический анализатор, и по сути делает тоже самое. Но всё равно в итоге автору придётся сделать тоже, что и было сделано у меня - разбирать синтаксическое дерево, многие конструкции регекспом не разберёшь (ну т.е. разберёшь конечно, но трудоёмкость неоправданная). P.S.S. Так же без AST нельзя выявить зависимости переменных друг от друга, и поиск будет слепым. Пример: if($_GET[a]==1) eval($_GET);
Qwazar, а идею по хспайдеру на пхп которую ты подал, я уже подхватил, на следующей неделе наверное выложу!
Кстати для С++ есть динамические анализаторы (и библиотеки для удобной разработки динамических анализаторов).
Делается несколько запросов, вычисляется средний показатель интересующих параметров, вычисляется допустимый разброс. А далее скрипт тебя информирует если получает результаты выбивающиеся из полученного распределения. Вроде так.
Для чего? Code: if($a==1) echo "вы ввели лажу"; if($a==2) echo "вы ввели лажу"; ... if($a==N) echo "вы ввели лажу"; if($a==N+1) echo "а вот теперь всё клёво + очень много текста" Как я понимаю, подозрительным будет последний вариант? В чём практический смысл такого подхода? З.Ы. Я не критикую, просто пытаюсь понять.
Наверное для случаев когда сервер не выдает ошибку. Или скажем для подобного кода $query = "...."; $result = mysql_query($query) or exit($query);
когда тестил-столкнулся с проблемой, что на тестируемом сайте вылазеет реклама случайного размера. подумал,как можно решить,потом еще подумал и решил,что мат.статистика-это удобно для выявления анормальных ответов среди большинства одинаковых. вообще, математику никто не отменял и подумал, что целесообразно применить то,что уже изобретено) ps.КАК ЖЕ НЕУДОБНО ПИСАТЬ С ТЕЛЕФОНА!