Я усвідомлюю, що параметризовані SQL-запити є оптимальним способом оздоровити введення користувачів під час створення запитів, що містять введення користувача, але мені цікаво, що не так у прийнятті вводу користувача та уникненні будь-яких єдиних лапок та оточення цілої рядки одинарними лапками. Ось код:
sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"
Будь-яка цитата, яку вводить користувач, замінюється подвійними одноцитатами, що позбавляє користувачів можливості закінчувати рядок, тому все, що вони можуть набрати, такі як крапки з комою, знаки відсотків тощо, - все буде частиною рядка та насправді не виконується як частина команди.
Ми використовуємо Microsoft SQL Server 2000, для якого я вважаю, що одна цитата - це єдиний роздільник рядків і єдиний спосіб уникнути розділового рядка, тому немає можливості виконати що-небудь, у що вводиться користувач.
Я не бачу жодного способу запустити атаку ін'єкцій SQL проти цього, але я розумію, що якби це було настільки бронезахищеним, як мені здається, хтось інший би про це вже подумав, і це було б звичайною практикою.
Що не так з цим кодом? Чи є спосіб отримати атаку ін'єкцій SQL повз цю техніку санітарії? Приклад користувача, який використовує цю методику, був би дуже корисним.
ОНОВЛЕННЯ:
Я досі не знаю жодного способу ефективного запуску атаки ін'єкцій SQL проти цього коду. Кілька людей припустили, що зворотна косою рискою вдасться уникнути однієї цитати, а інша залишить кінець рядка, щоб решта рядка була виконана як частина команди SQL, і я розумію, що цей метод буде працювати для введення SQL у база даних MySQL, але в SQL Server 2000 єдиний спосіб (який мені вдалося знайти) вийти з однієї цитати - це ще одна одноцитата; нахили в косому напрямку це не робитимуть.
І якщо не існує способу зупинити вимкнення одноцитати, жоден решта вводу користувача не буде виконаний, оскільки він буде сприйматися як один суміжний рядок.
Я розумію, що є кращі способи санітарного введення даних, але мені дуже цікаво дізнатися, чому метод, який я запропонував вище, не буде працювати. Якщо хтось знає який-небудь конкретний спосіб влаштувати атаку ін'єкцій SQL проти цього методу санітарії, я б хотів це побачити.