выражения regex предотвращают внедрение sql / script - PullRequest
3 голосов
/ 15 сентября 2011

Я пытаюсь создать выражение регулярного выражения для проверки на стороне клиента (до проверки на стороне сервера, которая также будет иметь место) для предотвращения внедрения sql / script т.е. 1004 * работа

(script)|(<)|(>)|(%3c)|(%3e)|(SELECT) |(UPDATE) |(INSERT) |(DELETE)|(GRANT) |(REVOKE)|(UNION)|(<)|(>)

Каков правильный формат для этого (приведенного выше) выражения, чтобы я мог заставить его работать?

например. моя программа проверки электронной почты выглядит так

(/^[^\\W][a-zA-Z0-9\\_\\-\\.]+([a-zA-Z0-9\\_\\-\\.]+)*\\@[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)*\\.[a-zA-Z]{2,4}$/))

О, и если вы можете придумать что-нибудь еще, пожалуйста, "кричите".

Ответы [ 5 ]

5 голосов
/ 11 июля 2017

Обычно внедрение Sql происходит в строках, передаваемых параметрам команды sql, таким как вставка, обновление, удаление или выбор. Это регулярное выражение проверяет, есть ли какой-либо встроенный или блочный комментарий в команде sql.

/[\t\r\n]|(--[^\r\n]*)|(\/\*[\w\W]*?(?=\*)\*\/)/gi
3 голосов
/ 15 сентября 2011

Вы не можете никоим образом даже препятствовать попыткам внедрения SQL на стороне клиента. Это ужасная, ужасная идея, которая не может помочь вам, но может вызвать боль у настоящих пользователей. Это не остановит никого, у кого есть шанс использовать SQLi.

Что касается регулярного выражения, вам нужно добавить / в начале и в конце, как в вашем примере с почтой, чтобы обозначить его как регулярное выражение. Кроме того, я думаю, что дизайн регулярных выражений имеет недостатки, поскольку он все еще допускает множество векторов инъекций. Например, он допускает страшные одинарные кавычки, комментарии и прочее. Он даже не начинает охватывать все встроенные функции вашей СУБД, которые могут быть сбиты с толку. Злоумышленник часто использует, например, Операторы SELECT уже на вашей стороне сервера, поэтому их удаление, вероятно, тоже не поможет.

Ваша лучшая защита - использовать параметризованные запросы на стороне сервера (например, pg_prepare для php и postgres)

1 голос
/ 12 июля 2018

Только a-z или A-Z или 0-9 между 4-8 символами:

^([a-z]|[A-Z]|[0-9]){4,8}$
0 голосов
/ 23 сентября 2011

SQL-инъекция и экранирование звука для многих людей магическое, что-то вроде щита от какой-то таинственной опасности, но: не бойтесь этого - в этом нет ничего волшебного. Это просто способ включить специальные символы, обрабатываемые запросом.

Итак, не изобретайте новые магические щиты и способы защиты магической опасности от инъекций! Вместо этого попытайтесь понять , как работает выход из входа .

0 голосов
/ 15 сентября 2011

Чаще встречается экранирование управляющих символов, таких как `и ', так что можно по-прежнему вводить код SQL в базу данных, например, в CMS, и я добавляю статью о внедрении SQL. Я хочу использовать эти слова и символы, не вызывая инъекции. Глядя на это, кажется, что это что-то с базой HTML, поэтому преобразуйте <и> в & lt; и & gt ;, который будет очищать любые и все HTML-теги, в то же время позволяя отображать демонстрационный контент HTML.

Как уже говорилось, все это должно быть на стороне сервера, так как оно входит в систему.

...