Написание инструментов статического анализа кода

Я хотел бы написать инструмент статического анализа кода для поиска уязвимостей SQLi в коде PHP. Обычно я просто использую скрипт для разделения функций и проверяю их на неадекватную очистку. Очевидно, что этот подход ограничен.

Схема программы, которую я хочу написать, такова:

  1. Найти все вызовы mysql_query
  2. Найдите все ссылки на функции, вызывающие mysql_query.
  3. Отслеживайте все переменные, которые входят в каждый вызов запроса, и выясняйте, выполняется ли для них mysql_real_escape_string.

Я застрял между двумя подходами к написанию этого. Либо я использую расширение PHP, либо пишу его как отдельное приложение с нуля.

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

Кто-нибудь, у кого есть опыт написания расширений PHP, может посоветовать, как решить эту проблему?


person bcoughlan    schedule 22.07.2011    source источник
comment
Как вы собираетесь отличить переменную, переданную извне, от SQL, построенного из различных строк и переменных? Очень сложно отследить в каком-то коде, это обычная практика для построения SQL.   -  person Orbling    schedule 23.07.2011


Ответы (1)


Я предлагаю ознакомиться с проектом RIPS Scanner и просмотреть его исходный код в поисках идей. Он выполняет именно те функции, которые вы хотите сделать.

person Michael Berkowski    schedule 22.07.2011
comment
Вот именно, кажется неточным. Он пытается выполнить контроль и анализ потока данных в коде. Технический документ на сайте указывает, что реализация для обоих довольно неполная. - person Ira Baxter; 23.07.2011