SQL 주입 공격은 프로그램 문의 불완전성으로 인해 발생합니다. SQL 주입 공격을 효과적으로 방지하기 위해 ASP에서 instr 함수를 사용하는 방법을 살펴보겠습니다. 구체적인 내용은 이렇습니다.
instr(Request(id), )>0 또는 instr(Request(id),')>0이면 response.redirect index.htm
물론 그 이후에도 원하는 내용을 작성하실 수 있습니다!
먼저 instr 함수를 배워보겠습니다.
문법
InStr([시작, ]string1, string2[, 비교])
InStr 함수의 구문에는 다음과 같은 매개변수가 있습니다.
매개변수 설명
시작은 선택 사항입니다. 각 검색의 시작 위치를 설정하는 숫자 표현식입니다. 생략하면 첫 번째 문자 위치부터 검색이 시작됩니다. start에 Null이 포함되어 있으면 오류가 발생합니다. 비교가 지정된 경우 시작 매개변수가 필요합니다.
문자열1이 필요합니다. 검색할 문자열 표현식을 허용합니다.
문자열2
필수의. 검색할 문자열 표현식입니다.
비교는 선택 사항입니다. 하위 문자열을 평가할 때 사용되는 비교 유형을 나타내는 숫자 값입니다. 숫자 값은 설정 섹션을 참조하세요. 생략하면 이진 비교가 수행됩니다.
비교 매개변수는 다음 값을 가질 수 있습니다.
상수 값 설명
vbBinaryCompare 0 이진 비교를 수행합니다.
vbTextCompare 1 텍스트 비교를 수행합니다.
[반환 값]
InStr 함수는 다음 값을 반환합니다.
InStr이 반환되는 경우
string1은 길이가 0이고 0입니다.
string1은 Null Null입니다.
string2는 길이가 0인 시작입니다.
string2는 Null Null입니다.
문자열2를 찾을 수 없습니다 0
string1에서 string2를 찾으십시오. 일치하는 문자열의 위치를 찾으십시오.
시작 > Len(string2) 0
다음 예에서는 InStr 검색 문자열을 활용합니다.
희미한 SearchString, SearchChar, MyPos
SearchString =XXpXXpXXPXXP ' 검색할 문자열입니다.
SearchChar = P ' P를 검색합니다.
MyPos = Instr(4, SearchString, SearchChar, 1) '텍스트 비교는 네 번째 문자부터 시작하여 6을 반환합니다.
MyPos = Instr(1, SearchString, SearchChar, 0) '이진 비교는 첫 번째 문자부터 9를 반환합니다.
MyPos = Instr(SearchString, SearchChar) ' 9를 반환합니다.
' 기본값은 이진 비교입니다(마지막 인수는 생략됨).
MyPos = Instr(1, SearchString, W) '이진 비교는 문자 1부터 시작하여 0을 반환합니다(W를 찾을 수 없음).
InStrB 함수는 문자열에 포함된 바이트 데이터를 사용하므로 InStrB는 다른 문자열에서 한 문자열이 처음 나타나는 문자 위치가 아니라 바이트 위치를 반환합니다.
요약: instr의 기능은 다음과 같습니다. 다른 문자열에서 문자나 문자열이 처음 나타나는 위치를 반환합니다. 어떤 코드인지 살펴보겠습니다.
instr(Request(id), )>0 또는 instr(Request(id),')>0이면
의미: 요청(id)에서 문자(공백)와 문자(')의 특정 위치를 비교합니다(이진 비교). (공백)과 (') 문자가 발견되면 then 이후의 명령문입니다!
이제 모두가 그 의미를 이해합니다!
처음 봤을 때 ASP에 있으면 어떡하지? Id=90에 문자(;or,) 및 기타 문자를 추가할 때 실수하는 것은 실수가 아닌가요? (예, 대답은 '예'입니다. :)
어쩌면 다른 사람이 말했듯이 if instr(Request(id), )>0 또는 instr(Request(id),')>0 then 문에 몇 가지 문자를 추가하겠습니다. 예를 들어 다음과 같이 변경합니다. if instr(Request (id ), )>0 또는 instr(Request(id),')>0 또는 instr(Request(id),;)>0 또는 instr(Request(id),, )>0 then
잠깐, 나중에 추가해도 됩니다, 하하! (이건 좋은데! 하지만 더 나쁘다 :)
예, 이것을 추가하면 실제로 소위 해커를 물리칠 수 있습니다!
사실 꼭 필요한 건 아닙니다. instr(Request(id), )>0이라는 문장도 잊어버리셨나요? (space)와 비교하기도 했는데요! 이 문장이 있는 한 소위 해커들이 1=1이라고 말해도 소용없지 않을까요?