У меня возникают проблемы с регулярными выражениями, используя Python 2.7, если это имеет значение.Regex захватывает вставленные переменные в выражениях строки PHP SQL
В основном то, что я пытаюсь сделать, это захватить вставленные переменные в строку запроса декларации PHP SQL, например:
$query = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
Это должно вернуть $user
, когда я получаю вторую группу из матча.
Вот мое регулярное выражение, как он стоит прямо сейчас:
r'.*?\s*=\s*\(\".*?\'(\$[^\']+)\'.*?\"\);'
Вышеперечисленные работы для примера я использовал. Однако, когда я представлю еще один случай, когда вставленные переменные использует синтаксис '{$foo['bar']}'
, мое другое регулярное выражение ниже не работает, которая учитывает тот факт, что она содержит апостроф, который не закрывает переменный:
r'.*?\s*=\s*[\(]?\".*?(?:(?:\'(\$[^\']+)\')|(?:\'(\$\{[^\}]+\})\'))?.*?\"[\)]?;'
Так в основном я хочу захватить либо синтаксис '$user
, либо файл с {}, например '{$foo['bar']}'
. Обратите внимание, что это не эксклюзивно, просто вставленная переменная может быть любой, и я хочу учесть их.
Почему в мире вы хотите анализировать запрос mysql с помощью регулярного выражения? Надеюсь, это не защита от инъекций. – cb0
Да, это своего рода. Это для школьного проекта, где мы хотим видеть, сколько кода GitHub не защищено, используя самые базовые средства защиты от инъекций PHP, такие как подготовленные операторы или экранированные строки. Поэтому нам нужно искать много кода, я думал, что regex - лучший вариант. – Jokab
Этот звук интересный (классный школьный проект) еще довольно сложно. Regex действительно является одним из вариантов сделать это, но никогда не предложит полного решения. Для очень сложного кода невозможно определить поток управления программой. Таким образом, не может быть никакой реальной защиты, где выполняются запросы. Возможно, это уже произошло задолго до этого. Другим вариантом было бы создать дерево ада кода, это должно быть проще для поиска. Это целая куча работы, но может дать лучшие результаты, чем регулярное выражение. – cb0