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



Я понимаю, что параметризованные SQL-запросы-это оптимальный способ очистки пользовательского ввода при создании запросов, содержащих пользовательский ввод, но мне интересно, что не так с пользовательским вводом и экранированием любых одинарных кавычек и окружением всей строки одинарными кавычками. Вот код:

sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"

любая одинарная кавычка, которую вводит пользователь, заменяется двойными одинарными кавычками, что исключает возможность завершения строки пользователями, поэтому все остальное, что они могут ввести, например точки с запятой, знаки процента и т. д. будут частью строки и фактически не будут выполняться как часть команды. Мы используем Microsoft SQL Server 2000, для которого я считаю, что одинарная кавычка является единственным разделителем строк и единственным способом избежать разделителя строк, поэтому нет никакого способа выполнить что-либо, что вводит пользователь.

Я не вижу никакого способа запустить атаку SQL-инъекции против этого, но я понимаю, что если бы это было так же пуленепробиваемо, как мне кажется, кто-то другой уже подумали об этом, и это было бы обычной практикой. Мой вопрос таков: что не так с этим кодом? Кто-нибудь знает способ получить атаку SQL-инъекции мимо этой техники дезинфекции? Пример пользовательского ввода, который использует этот метод, был бы очень полезен.

обновление:

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

причина, по которой я еще не принял ни одного из ответов, заключается в том, что я до сих пор не знаю, как эффективно запустить атаку SQL-инъекции против этого кода. Несколько человек предположили, что обратная косая черта будет избегать одной одинарной кавычки и оставлять другую для завершения строки, чтобы остальная часть строки выполнялась как часть команды SQL, и я понимаю, что этот метод будет работать внедрите SQL в базу данных mySQL, но в MS SQL 2000 единственный способ (который я смог найти) избежать одинарной кавычки-это с другим одиночным qoute; обратные косые черты не сделают этого. И если нет способа остановить экранирование одинарной кавычки, ни один из остальных пользовательских вводов не будет выполнен, потому что все они будут приняты как одна непрерывная строка.

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

170   0  
    Ничего не найдено.

Добавить ответ:
Отменить.