2010-01-29 2 views
0

일부 친숙한 스택 오버 플로우 멤버 (Martin B와 Kev Chadders에게 큰 감사)의 도움을 받아 코드를 다시 작성했습니다. 이 작업을 마친 후 코드가 여전히 SQL Injection에 열려 있는지 확인하고 싶습니다. 나는 코드가 현재 작동하고 있다고 믿지만, 당신이 듣고 싶어하는 눈먼 오류는 역시 듣고 싶습니다. 내 코드는 다음과 같이 표시됩니다.SQL 인젝션 공격에 대해 이러한 SQL 쿼리가 열려 있습니까?

-code removed- 
+0

Response.Write를 (결과) 만 편집 동안 추가 된 몇 가지 행운이 있었다 – Phil

+0

나는 또한이 일을하고있다 : 문자열 = Request.QueryString을 같이 희미한 querystringvar을 로 .toString 만약 InStr이 (querystringvar, "%의 20union") 그런 다음 Response.Redirect를 ("/ 오류/504.aspx?"& querystringvar) 의 ElseIf InStr이 (querystringvar, "%의 20select") 그런 다음 Response.Redirect를 ("/ 오류/"error ="& querystringvar) 내 질문의 코드가로드되기 전에 오류 페이지로 리디렉션되는 금지 된 단어 목록이 길어졌습니다. – Phil

답변

5

당신이 SQL 주입 공격으로부터 안전 보이지만, 같은 코드 :

Response.Write(result); 

과 :

Response.Write("<b><u> --- Begin SQL Exception Message ---</u></b><br />") 
Response.Write(ex) 
Response.Write("<br /><b><u> --- End SQL Exception Message ---</u></b>") 

당신은 XSS 같은 다른 형태의 공격에 대한 열 떠날 수 있습니다. ASP.NET 컨트롤의 텍스트 요소는 페이지에 직접 쓰지 말고 설정해야합니다.

+0

감사 표시 이제 구현할 것입니다 – Phil

+0

ASP.NET에서'Response.Write'를 수행하는 것은 나쁜 습관과 상관없이 어떻게 XSS에 공개됩니까? 페이지에 쓰여지는 것은 사용자 입력이 아닙니다. XSS (있는 경우)는 ASP.NET 레이블에 'Text'속성을 설정했기 때문에 사라지지 않습니다. AntiXSS 라이브러리가 페이지에 표시되는 사용자 입력 인 경우 AntiXSS 라이브러리를 사용해야합니다. –

+0

Wim에 대한 추가 정보를 가져 주셔서 감사합니다. 모범 사례를 위해서. SqlException 같이 catch 예 SQLErrLabel.Text = ex.ToString 이 더 적절할까요? – Phil

2

나에게 잘 보입니다.

기본적으로 SQL 문자열을 연결하지 않고 매개 변수가있는 쿼리를 사용하면 SQL 주입 공격으로부터 안전합니다.

2

모든 SQL 주입 문제를 효과적으로 제거하는 SqlParameters을 사용하고 있습니다.

1

잠재적 인 SQL 주입 취약점을 검사하려면 스캐너를 실행해야합니다. 내가 첫 번째 쿼리 후 결과에 있었는지 확인하는 http://sqlmap.sourceforge.net/