Va1entin |
2Alexey Kudinov Говорим SQL-injection, подразумеваем права на выполнение. Думаю, что Миша в первом ответе это и имел ввиду.
|
Нет,я имел ввиду не это. Я имел ввиду что если у вас процедура авторизации имеет вид:
Create Procedure Authorize
@Login varchar(50),
@Pass varchar(50)
AS
select * from LoginPassword where Login=@Login AND [Password]=@Pass
GO
И вы ее вызываете так:
SqlCommand cmdAuth = new SqlCommand(this._sqlConn);
cmdAuth.CommandText = "Authorize";
cmdAuth.CommandType = CommandType.StoredProcedure;
cmdAuth.Parameters.Add("@Login", SqlDbType.varchar).Value = tbxLogin.Text;
cmdAuth.Parameters.Add("@Pass", SqldbType.varchar).Value = tbxPass.Text;
SqlDataReader dr = cmdAuth.ExecuteReader();
dr.read();
//нет записей если неверные логин пароль
то все нормально и спокойно. А если вы делаете так:
SqlCommand cmdAuth = new SqlCommand(this._sqlConn);
cmdAuth.CommandText = "select * from LoginPassword where Login='"
+ tbxLogin.Text +"' AND [Password]='" + tbxPass.Text +"'";
cmdAuth.CommandType = CommandType.Text;
SqlDataReader dr = cmdAuth.ExecuteReader();
dr.read();
то вроде тоже все пучком. Но если в tbxPass введут такой текст:
adadasdad' OR 1=1 --
То ваша команда выполнится всегда успешно. Вот это и есть SQL-иньекция и именно ее я и имел ввиду.
Va1entin |
2Misha 'Karn' Ivanov А @str = 'drop ...'? |
Этот пример я и привел как пример уязвимой ХП:)