Я понимаю, что параметризованные SQL-запросы - это оптимальный способ очистки пользовательского ввода при создании запросов, содержащих пользовательский ввод, но мне интересно, что плохого в том, чтобы принимать пользовательский ввод и экранировать любые одинарные кавычки и окружать всю строку одинарными кавычками , Вот код:
sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"
Любые одиночные кавычки, которые вводит пользователь, заменяются двойными одинарными кавычками, что исключает возможность пользователям завершать строку, поэтому все остальное, что они могут вводить, например точки с запятой, знаки процента и т. Д., Будет частью строка и на самом деле не выполняется как часть команды. Мы используем Microsoft SQL Server 2000, для которого, как мне кажется, одинарная кавычка является единственным разделителем строк и единственным способом избежать строкового разделителя, поэтому нет способа выполнить что-либо, введенное пользователем.
Я не вижу никакого способа начать атаку SQL-инъекцией против этого, но я понимаю, что если бы это было настолько пуленепробиваемым, как мне кажется, кто-то еще подумал бы об этом, и это было бы обычной практикой. У меня такой вопрос: что не так с этим кодом? Кто-нибудь знает способ получить атаку SQL-инъекций после этой техники очистки? Пример пользовательского ввода, который использует эту технику, был бы очень полезен.
UPDATE:
Спасибо всем за ответы; почти вся информация, с которой я столкнулся в своих исследованиях, где-то появилась на этой странице, что является признаком интеллекта и умения людей, которые нашли время из своих напряженных дней, чтобы помочь мне с этим вопросом.
Причина, по которой я еще не принял ни одного из ответов, заключается в том, что я до сих пор не знаю ни одного способа эффективного запуска атаки с использованием SQL-инъекций для этого кода. Несколько человек предположили, что обратная косая черта будет выходить из одной одинарной кавычки и оставлять другую для завершения строки, так что остальная часть строки будет выполнена как часть команды SQL, и я понимаю, что этот метод будет работать для внедрения SQL в база данных mySQL, но в MS SQL 2000 единственный способ (который я смог найти), чтобы избежать одиночной кавычки, это с помощью одной одиночной кавычки; обратная косая черта не сделает этого. И если нет способа остановить экранирование одинарных кавычек, ни один из оставшихся пользовательских вводов не будет выполнен, потому что все они будут восприняты как одна непрерывная строка.
Я понимаю, что есть более эффективные способы очистки входных данных, но мне действительно больше интересно узнать, почему метод, который я предоставил выше, не будет работать. Если кто-нибудь знает какой-либо конкретный способ организовать атаку SQL-инъекцией с помощью этого метода очистки, я бы хотел его увидеть.