SQL 인젝션에 대해 배우고 싶습니다.SQL 인젝션 저장 프로 시저
웹 응용 프로그램을 만들고 내 데이터베이스에 대한 일부 정보에 액세스하는 저장 프로 시저를 만들었습니다. 여기
내 저장 프로 시저와의 ASP .NET 응용 프로그램Create Procedure spTest
(
@UserName varchar(20),
@UserPwd varchar(max)
)
AS
Begin
Declare @sql varchar(max)
set @sql = 'select UserName,UserPwd from Users where UserName='''+ @UserName+ '''
And UserPwd = '''+ @UserPwd + ''' '
Exec(@sql)
End
C# 코드의 코드입니다 : I 입력, 사용자 이름 텍스트 상자에서
string connString = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
using (SqlConnection con = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand("spTest",con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@UserName",txtUserName.Text);
cmd.Parameters.AddWithValue("@UserPwd", txtPassword.Text);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
if (dr.HasRows)
{
labelLogin.Text = "Logged in";
}
else
{
labelLogin.Text = "Not logged in";
}
bobby' or 1=1--
"바비 "잘못된 사용자 이름입니다.
이제 1 = 1은 항상 true이고 나머지 SQL 문은 주석 처리되어 있기 때문에 응용 프로그램이 가짜 사용자 이름으로 로그인한다고 생각했습니다.
그러나 "기록되지 않음"이 표시됩니다. 여기에 무엇이 누락 되었습니까?
감사합니다.
여기에서 작성한 것처럼 매개 변수화 된 쿼리는 SQL 삽입을 방지하기 위해 값을 인코딩합니다. 주 사용 가능 쿼리를 작성하는 것이 중요하다면 StringBuilder 또는 연결을 사용하여 쿼리에 직접 값을 써야합니다. – GalacticCowboy
저장 프로 시저를 사용하여이를 수행하는 방법? 필자는 매개 변수화 된 쿼리를 사용하지 않는 한 저장 프로 시저가 반드시 SQL 인젝션으로부터 안전하지는 않다고 읽었습니다. 하지만 코드에서 어떻게 사용합니까? 어디서나 매개 변수없이 저장 프로 시저를 사용하는 방법을 찾을 수 없습니다. 나는 "저장 프로 시저 SQL 주입",하지만 자습서는 모두 저장 프로 시저를 만드는 잘못된 방법을 설명하지만 ASP 코드에서 사용하는 방법을 찾을 수 없습니다. – coffeeak
나는 SQL 문과 함께했는데 스토어드 프로 시저로 어떻게해야하는지 모른다. – coffeeak