Как вы можете запросить базу данных SQL на наличие вредоносных или подозрительных данных? - PullRequest
0 голосов
/ 25 апреля 2011

В последнее время я проходил проверку безопасности приложения PHP и уже нашел и исправил одну уязвимость XSS (как при проверке ввода, так и при кодировании вывода).

Как запросить базу данных дляубедиться, что в нем не осталось вредоносных данных?Рассматриваемые поля должны быть текстовыми с допустимыми символами (-, #, пробелы), но не должны содержать никаких специальных символов HTML (<, ", ',> и т. Д.).

Я предполагаю, что должен использовать обычныевыражения в запросе, есть ли у кого-нибудь предварительно скомпилированные регулярные выражения специально для этой цели?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2011

Если вас интересуют не алфавитно-цифровые символы и это SQL Server, вы можете использовать:

SELECT *
FROM MyTable
WHERE MyField LIKE '%[^a-z0-9]%'

Это покажет вам любую строку, где MyField имеет что-либо кроме a-z и 0-9.

EDIT:

Обновленный шаблон будет: LIKE '%[^a-z0-9!-# ]%' ESCAPE '!'

Мне пришлось добавить символ ESCAPE, поскольку вы хотите разрешить тире -.

1 голос
/ 26 апреля 2011

По той же причине, по которой вы не должны проверять ввод по черному списку (то есть списку недопустимых символов), я постараюсь не делать то же самое в вашем поиске.Я комментирую, не зная предназначения полей, содержащих данные (например, имя, адрес, «обо мне» и т. Д.), Но я бы предложил построить ваш запрос, чтобы определить, что вы делаете хотите в вашей базе данных затем определить исключения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...