2014-12-23 6 views
-3

내 로그인 페이지에 대한 테스트로 내 데이터베이스에 aN SQl 주입을 만들었습니다. 사용자가 올바른 사용자 이름과 암호를 올바르게 삽입하려고 시도합니다. 그러나 사용자가 올바른 데이터를 입력하지 못하면 암호 복구를 위해 다른 웹 양식으로 이동하게됩니다. 암호 복구 양식에서 사용자는 표시되는 사용자 이름 (데이터베이스에있는 경우)과 알리미로 이메일 주소의 문자를 가져옵니다! 그런 다음 사용자는 전체 전자 메일 주소를 텍스트 상자로 확인하여 해당 전자 메일에 개인 정보를 보낼 수 있습니다. 나는이 테스트를 사용하여 내 SQL 주입을 시도 : 암호 복구 페이지에이 코드는 사용자 이름 필드와 비밀번호로 입력 된 특정 시도 후 내가 지시했다SQL 주입 공격 asp.net

 ' or'a'='a 

을 나는 내 데이터베이스에 첫 번째 이메일을 보여 주었다 일원으로서 나에게! 이 코드를 통해 데이터베이스의 첫 번째 행에 액세스 할 수있었습니다. 이러한 공격을 내 코드에서 방지 할 수있는 방법이 있습니까? 즉 SQl 문을 암호화하는 것입니다.

+6

[매개 변수가있는 쿼리] (http://msdn.microsoft.com/en-us/library/vstudio/bb738521(v=vs.100).aspx) –

+0

인라인 동적 sqls를 제거하고 사용하는 방법에 대해 확인하십시오. 처음부터 procs를 저장 했습니까? –

답변

1

저장 프로 시저 또는 적어도 매개 변수화 된 쿼리를 사용하면 문자열 연결을 사용하지 않습니다.

+0

Select 문에서이 작업을 수행하는 방법 매개 변수화 된 쿼리를 사용 해본 적이 있습니까? – Chris

+0

SqlCommand.Parameters.AddWithValue 메서드를 사용하십시오. 여기에 설명되어 있습니다. http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v=vs.110).aspx –

+0

I MailCheck 메서드에서 마지막 select 문을 변경하려고하지만 Paramaterized 쿼리로이를 수행하는 것이 다소 혼란 스럽습니다. – Chris