SQL 인젝션은 소위 그 수준의 해커 마스터에 의해 수행되었으며 이제 대부분의 해커 침입이 SQL 인젝션을 기반으로 하는 것으로 나타났습니다. 이봐, 누가 쉽게 시작할 수 있는지 알았어, 이제 헛소리는 하지 말자. 일반적인 SQL 주입 방지 프로그램을 작성하면 일반 http 요청은 가져오기 및 게시에 지나지 않으므로 게시물의 모든 불법 문자나 파일의 가져오기 요청에 있는 매개변수 정보를 필터링하는 한 다음과 같은 작업을 수행할 수 있습니다. http 요청 정보 필터링을 구현하여 판단합니다. SQL 주입 공격을 받을 수 있습니까?
IIS가 asp.dll에 전달한 get 요청은 문자열 형식입니다. 데이터가 Request.QueryString에 전달되면 asp 파서는 Request.QueryString의 정보를 분석한 다음 각 배열의 내용을 다음과 같이 구분합니다. "&" 데이터는 다음과 같이 가로채어집니다.
먼저 요청에 다음 문자를 포함할 수 없도록 정의합니다.
|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare
각 문자는 "|"로 구분된 후 획득된 Request.QueryString을 확인합니다. 구체적인 코드는 다음과 같습니다
.
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = 분할(SQL_Injdata,"|")
Request.QueryString<>"" 그러면
각 SQL_Get In Request.QueryString에 대해
SQL_Data=0인 경우 Ubound(SQL_inj)로
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 그러면
Response.Write "<스크립트 언어=****>alert('월드 무비 얼라이언스 SQL 범용 안티 주입 시스템 프롬프트 ↓nn 매개 변수에 잘못된 문자를 포함시키지 말고 주입을 시도하세요!'); History.back(- 1)</ 스크립트>"
응답.끝
종료하면
다음
다음
종료 조건
이런 식으로 get 요청의 주입 차단을 구현했지만 여전히 게시 요청을 필터링해야 하므로 배열 형태로도 존재하는 request.form을 계속 고려해야 합니다. 루프 판정. 코드는 다음과 같습니다:
If Request.Form<>"" 그러면
Request.Form의 각 Sql_Post에 대해
SQL_Data=0인 경우 Ubound(SQL_inj)로
if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 그러면
Response.Write "<스크립트 언어=****>alert('월드 무비 얼라이언스 SQL 범용 안티 주입 시스템 프롬프트 ↓nn 매개 변수에 잘못된 문자를 포함시키지 말고 주입을 시도하세요! nnHTTP: //www.521movie. com ');history.back(-1)</스크립트>"
응답.끝
종료하면
다음
다음
종료하면
이제 완료되었습니다. get 및 post 요청에 대한 정보 차단을 구현했습니다. conn.asp와 같은 데이터베이스 파일을 열기 전에 이 페이지를 참조하기만 하면 됩니다. 다시 SQL 인젝션 공격을 받을까 걱정하지 않고 프로그램을 계속 개발할 수 있습니다. 그렇지 않나요?