Я не уверен, как кто-то сломает мой SQL, если я просто заменю все входящие одинарные кавычки двойными кавычками. Может ли кто-нибудь просветить меня как для Oracle, так и для SQL Server? Благодарю.SQL Injection, простейшее решение
string sql1 = "select * from users where user_id = '" + "O'Reily".Replace("'", "''").Replace("\", "") + "'";
==> "* Выберите из пользователей, где user_id = 'O''Reily'
string sql2 = "select * from users where user_id = '" + "O'''Reily".Replace("'", "''").Replace("\", "") + "'";
==>" * Выберите из пользователей, где user_id = 'O' '' ''» Reily "
ОБНОВЛЕНИЕ: косая черта '\' является ограниченным символом в приложении и будет удалена до того, как она будет использована в запросе. Двойную тире можно легко добавить в этот список символов ограниченного доступа.
одинарные кавычки - это не столько проблема, как «-» и «;». По возможности ограничивайте ввод текста пользователем. –
Обязательные Маленькие Таблицы Бобби: http://xkcd.com/327/ –
У Бобби было бы хорошо с этим решением. Одинарная кавычка будет сбежать до двойника, и капля никогда не будет выполнена. – user112799