Мне сказали, что при использовании SqlCommand в C # и при добавлении параметров к этой команде это повысит безопасность, поскольку будет защищать от внедрения Sql. Мне было интересно, правда ли это на самом деле. Если да, то как он может остановить внедрение Sql, потому что я понимаю, что при использовании параметров он просто вставляет строку в точку в команде Sql. Значит, эта строка может быть чем угодно, что делает возможным внедрение Sql, верно?
Уточнение параметров SqlCommand
Ответы (1)
Это не простая замена. Платформа escape отправит значения, (особенно строки), [как отдельную часть вызова RPC], так что невозможно выполнить значение как код .
Спасибо @PanagiotisKanavos за исправление (6 лет спустя).
person
harpo
schedule
29.10.2011
Итак, фреймворк удалит числа или что-нибудь внутри отметок? ''
- person Eric R.; 30.10.2011
Нет, галочки будут включены в запрос. Итак, если ваше поле - это число и есть что-то вроде этого. '+ 0 = 0', все это будет параметром, и запрос будет ошибочным, в отличие от намерения инъекции, которое заключалось в изменении запроса. Ошибка - это то, что вам нужно.
- person Valamas; 30.10.2011
Нет, он ничего не удалит, он просто закодирует его, чтобы его можно было сохранить в базе данных в том виде, в котором он был написан. SqlParameter также заботится о типе данных, в которых соответствующий столбец хранит и кодирует его соответствующим образом, а также проверяет связанные условия, например, если строка помещается в столбец, содержащий VARCHAR (n).
- person Nikola Radosavljević; 30.10.2011
Фреймворк ничего не экранирует, не конвертирует и не кодирует. Значения параметров отправляются как отдельные поля в вызове RPC. Они никогда не являются частью строки запроса и даже не конвертируются в строки, поэтому их нельзя выполнить.
- person Panagiotis Kanavos; 03.11.2017
Спасибо, @PanagiotisKanavos, ответ обновлен. Тогда я этого не знал.
- person harpo; 12.11.2017