Я просматривал некоторые стандарты кодирования в своей работе и наткнулся на это:
string query = "SELECT * FROM USERS WHERE USER_ID='" + userIdFromWebPage + "'";
userIdFromWebPage - это переменная, содержащая ненадежные данные, которые не были проверены.
Представьте, что он содержит одно из следующего:
Окончательный запрос может выглядеть так.
string query = "select * FROM USERS WHERE USER_ID='';exec xp_cmdshell('format c:') -";
Это приводит к формату диска c: \ на сервере базы данных.
Это правда?
Настоящий вопрос can that code be used for SQL Injection?
и ответ - абсолютно да. Дни вандалов, которые форматировали ваш диск только для того, чтобы сеять хаос, давно прошли, в наши дни атаки осуществляют люди, заинтересованные в финансовой выгоде, они обычно используют вектор SQL-инъекций, как правило, для добавления вашего хоста в свой ботнет, иногда для кражи информации Иногда приходится брать свои данные в заложники и требовать выкуп (зашифровать их и попросить компенсацию за расшифровку). Так что вряд ли они выдадут format c:
.
Жестяная банка xp_cmdshell
использоваться для выполнения такой команды, как format c:
? Не по умолчанию, начиная с SQL 2005 движок отключает xp_cmdshell
по умолчанию и администратор должен явно включить его обратно. Но если это является включен, можно ли его использовать? Да. Отформатирует ли ОС диск c:? Вряд ли. Сегодня ни одна операционная система не поддерживает формат системного тома.
Но в конечном итоге дело в том, что ваш код должен не допускать SQL-инъекций.