Я создаю сайт, к которому пользователь, к сожалению, должен предоставить регулярное выражение для использования в предложении MySQL WHERE. И, конечно же, я должен проверять ввод пользователя для предотвращения внедрения SQL. Сайт создан в PHP, и я использую следующее регулярное выражение для проверки моего регулярного выражения:
/^([^\\\\\']|\\\.)*$/
Это двойное экранирование из-за способа обработки регулярных выражений PHP. Способ, которым он должен работать, – это соответствовать безопасным регулярным выражениям без лишних одиночных кавычек. Но, будучи в основном самоучкой, я хотел бы знать, безопасно ли это сделать.
Если вы используете подготовленные инструкции, SQL-инъекция будет невозможна. Вы всегда должны использовать подготовленные заявления.
Роборг делает превосходный момент, хотя о дорогих регулярных выражениях.
Вы должны просто передать строку через mysql_escape_string или mysql_real_escape_string .
Я бы с осторожностью принял любое старое регулярное выражение, хотя некоторые из них могут работать в течение длительного времени и будут связывать ваш сервер БД.
Из шаблона Синтаксис :
Остерегайтесь шаблонов, содержащих вложенные неопределенные повторы. Это может занять много времени, когда применяется к строке, которая не соответствует. Рассмотрим фрагмент шаблона (a +) *
Это может соответствовать «aaaa» 33 различными способами, и это число увеличивается очень быстро по мере того, как строка становится длиннее.
Если это необходимо для отображения этого выражения reg, тогда большинство программ просто Html Кодирует значение и сохраняет в БД, а затем Decode на выходе. Опять же, только для целей показа, если вам нужно использовать реестр exp, который представлен, это не сработает.
Также известно, что существует метод, в котором человек, намеренный делать инъекции, записывает там SQL, конвертирует его в varbinary и представляет команду exec с базовым представлением 64 запроса, с которым я был поражен в прошлом.