Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Лучший подход к разбору для SQL в PHP файлов?
Для моей старшей диссертации я разработал программу, которая будет автоматически обнаруживать и предлагать исправления уязвимостей SQL инъекций с использованием подготовленных инструкций. В частности, расширение mysqli для PHP. Мой вопрос для сообщества SO заключается в следующем: каков ваш предпочтительный подход к обнаружению SQL в исходном коде PHP?
Я использовал перечисление, содержащее SQL keywords (SELECT, INSERT, ...) , и в основном анализировал каждую строку, повторяя перечисление, чтобы определить, присутствует ли какой-либо SQL. Кроме того, я должен был убедиться, что синтаксический анализатор не ошибочно обнаруживает html (например <\select>).
Для меня это решение работало нормально, но теперь у меня есть немного больше времени на руках и я подумал о рефакторинге кода, чтобы использовать более элегантное (и эффективное) решение. Пожалуйста, ограничьте свои решения использованием C# , поскольку это то, в чем я написал свою программу.
Ваше решение кажется мне прекрасным. Другой способ состоял бы в том, чтобы разобрать файл PHP с помощью синтаксического анализатора Lex/Yacc, используя grammar для PHP, есть один хороший инструмент разбора C# grammar под названием Coco/R http://www.ssw.uni-linz.ac.at/coco/ .
Однако я считаю, что если вы все же разберете язык, то в конечном итоге потратите слишком много времени (на разработку и вычисление) без каких-либо дополнительных результатов.
Я бы придерживался вашего оппортунистического подхода, но протестируйте его на различных кодах PHP и настройте его, чтобы охватить все возможные случаи.
Я не знаю специфики переменных в C#, так что вам придется простить меня или проголосовать против использования PHP, но 70% из времени, когда мой запрос SQL входит в переменную, как это
$sql = "SELECT * FROM table;";
Кроме того, я не могу придумать ничего, что вы могли бы сделать, чтобы улучшить то, что у вас уже есть.
Учитываете ли вы операторы, которые создаются по нескольким строкам и используют переменные внутри строки? (Пример ниже)
$sql = "SELECT * FROM table WHERE fname = $fname OR snmae = $sname";
Я не знаю специфики переменных в C#, так что вам придется простить или опустить голос за использование PHP, но 70% из времени, когда мой запрос SQL входит в переменную, похожую на эту..
Я не знаю специфики переменных в C#, так что вам придется простить или опустить голос за использование PHP, но 70% из времени, когда мой запрос SQL входит в переменную, похожую на эту..
Да, мой первоначальный подход состоял в том, чтобы просто искать $sql vars, так как это то, что используют большинство людей, но после тестирования против нескольких приложений PHP я быстро выбросил это решение, потому что некоторые разработчики используют некоторые фанковые имена переменных ...
Учитываете ли вы операторы, которые создаются по нескольким строкам и используют переменные внутри строки? (Пример ниже)
Да. Я также пытался обрабатывать утверждения, которые были созданы условно, но это не всегда получалось так хорошо. ;)
Простой regex для обнаружения всех операторов CRUD sql, используемых с функциями (предполагая, что $script содержит весь сценарий php)
preg_match_all('/\(\s*?"(?:SELECT|INSERT|UPDATE|DELETE) .*?"\s*?\)\s*?;/is',
$script, $matches);
Он должен соответствовать всем возможным операторам SELECT, INSERT, UPDATE, DELETE, если они заключены в круглые скобки и двойные кавычки. Он не учитывает регистр и должен соответствовать утверждениям, которые также охватывают несколько строк.
отредактируйте #1: Regex для сопоставления CRUD операторов, подобных назначениям строк;
preg_match_all('/\$\w+\s*?=\s*?"(?:SELECT|INSERT|UPDATE|DELETE) .*?"\s*?;/is',
$script, $matches);
редактировать #2:
// $variable detecting version of #1 regex
preg_match_all('/\(\s*?"(?:SELECT|INSERT|UPDATE|DELETE) .*?(?:\$\w+){1}.*?"\s*?\)\s*?;/is',
$script, $matches);