Уточнение параметров SqlCommand

Мне сказали, что при использовании SqlCommand в C # и при добавлении параметров к этой команде это повысит безопасность, поскольку будет защищать от внедрения Sql. Мне было интересно, правда ли это на самом деле. Если да, то как он может остановить внедрение Sql, потому что я понимаю, что при использовании параметров он просто вставляет строку в точку в команде Sql. Значит, эта строка может быть чем угодно, что делает возможным внедрение Sql, верно?


person Eric R.    schedule 29.10.2011    source источник


Ответы (1)


Это не простая замена. Платформа escape отправит значения, (особенно строки), [как отдельную часть вызова RPC], так что невозможно выполнить значение как код .

Спасибо @PanagiotisKanavos за исправление (6 лет спустя).

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