Что можно сделать, чтобы предотвратить внедрение SQL, если прямые запросы - это единственная доступная опция (нет параметризованных запросов или sprocs) - PullRequest
3 голосов
/ 22 января 2012

Извините за длинный заголовок, не хотел, чтобы люди просто читали заголовок, а не задавали вопрос, а затем ставили «дубликат ххх», когда на самом деле ххх о sprocs и т. Д ...

Так что я вситуация, когда я очень ограничен в том, что я могу использовать.Я ограничен классическим ASP и запросами, использующими только прямые запросы - т.е. никаких хранимых процедур или параметризованных запросов.

Какие у меня варианты здесь?Я думаю о замене определенных символов, все, если смогу, но я думаю, что в некоторых случаях определенные символы нужно пропустить.Я знаю, что приложение, для которого я пишу этот скрипт, заменяет все ' на '';этого должно быть достаточно, чтобы обойти хак ' or 1 = 1, но я не знаю, какие другие основные риски существуют для предотвращения.

Я немного прочитал, но везде говорят, что нужно идти для параметризованных запросовили sprocs, которые явно не подходят для меня.

Может ли кто-нибудь дать мне несколько советов о том, что я могу сделать, чтобы сделать свое приложение максимально безопасным, учитывая мои ограничения?Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 22 января 2012

Я не знаю, почему вы не хотите использовать параметризованные запросы с классическим ASP, но вы определенно можете.

Это немного сложнее, чем использовать их в ASP.NET, но нет никаких причин, по которым вы не можете их использовать.

Посмотрите на этот пост, ссылки в ответе очень хорошо объясняют, как действовать.

Параметризованные запросы БЕЗ хранимых процедур?

Если вы действительно не хотите выполнять этот тип запроса, вы всегда можете заменить «на», как вы сказали. Мы уже довольно давно занимаемся этим с некоторыми нашими устаревшими приложениями, и у нас не было проблем с внедрением SQL.

1 голос
/ 23 января 2012

Вы можете усилить безопасность, применив более строгий алгоритм к проверке ввода:

  • ограничить длину пользовательского ввода
  • ограничить символы, используемые при вводе пользователя
  • экранирование потенциальных специальных символов.

Например, если пользовательский ввод является числовым, вы можете проверить, что введены только символы 0..9.

Если пользователь вводитввод текста, и вы хотите разрешить произвольный текст, попробуйте ограничить текст, который можно вводить, чтобы избежать специальных символов.Если разрешены специальные символы, убедитесь, что ваш сценарий ASP обнаруживает их и избегает их, чтобы они обрабатывались как обычный текст.

0 голосов
/ 10 мая 2012

Вы можете использовать класс, реализующий javax.servlet.Filter. Этот фильтр будет перехватывать любые запросы к сервлету, где написан ваш SQL-код. Затем с помощью ServletRequestWrapper, вызываемого в doFilter () класса фильтра, вы можете выполнить проверку пользовательского ввода. Метод request.getparameter в вашем сервлете, который принимает пользовательский ввод, будет переопределен параметром get ServletRequestWrapper. В этом методе вы можете кодировать все специальные символы, присутствующие в пользовательском вводе. Это самый эффективный способ предотвращения SQL-инъекций, XSS-атак

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