Избегайте SQL-инъекции в пользовательском SQL-regex

Я создаю сайт, к которому пользователь, к сожалению, должен предоставить регулярное выражение для использования в предложении MySQL WHERE. И, конечно же, я должен проверять ввод пользователя для предотвращения внедрения SQL. Сайт создан в PHP, и я использую следующее регулярное выражение для проверки моего регулярного выражения:

/^([^\\\\\']|\\\.)*$/ 

Это двойное экранирование из-за способа обработки регулярных выражений PHP. Способ, которым он должен работать, – это соответствовать безопасным регулярным выражениям без лишних одиночных кавычек. Но, будучи в основном самоучкой, я хотел бы знать, безопасно ли это сделать.

Если вы используете подготовленные инструкции, SQL-инъекция будет невозможна. Вы всегда должны использовать подготовленные заявления.

Роборг делает превосходный момент, хотя о дорогих регулярных выражениях.

Вы должны просто передать строку через mysql_escape_string или mysql_real_escape_string .

Я бы с осторожностью принял любое старое регулярное выражение, хотя некоторые из них могут работать в течение длительного времени и будут связывать ваш сервер БД.

Из шаблона Синтаксис :

Остерегайтесь шаблонов, содержащих вложенные неопределенные повторы. Это может занять много времени, когда применяется к строке, которая не соответствует. Рассмотрим фрагмент шаблона (a +) *

Это может соответствовать «aaaa» 33 различными способами, и это число увеличивается очень быстро по мере того, как строка становится длиннее.

Если это необходимо для отображения этого выражения reg, тогда большинство программ просто Html Кодирует значение и сохраняет в БД, а затем Decode на выходе. Опять же, только для целей показа, если вам нужно использовать реестр exp, который представлен, это не сработает.

Также известно, что существует метод, в котором человек, намеренный делать инъекции, записывает там SQL, конвертирует его в varbinary и представляет команду exec с базовым представлением 64 запроса, с которым я был поражен в прошлом.