안녕하세요.
덕분에 많은 공부를 하고 있습니다.
한국보호진흥원에 사이트가 안전한지 보냈더니
답변이
취약점 원인 테스트 응답에 CSRF(Cross-Site Request Forgery) 시도가 성공적이었음을
입증하는 "WF_XSRF.html 파일에 대한 링크가 포함되었습니다.
파라메타 값을 loc=/main.asp →loc=%22%27%3E%3CIMG+SRC%3D%22%2FWF_XSRF.html%22%3E 으로
변경
권고 사항 유저 입력으로 부터 위험한 캐릭터들을 걸러내야 한다
이런식으로 왔습니다.
그래서 아래의 함수를 써서 하려는데요.
Function sqlFilter(search)
Dim strSearch(5), strReplace(5), cnt, data
'SQL Injection 특수문자 필터링
'필수 필터링 문자 리스트
strSearch(0)="'"
strSearch(1)=""""
strSearch(2)="\"
strSearch(3)=null
strSearch(4)="#"
strSearch(5)="--"
strSearch(6)=";"
'변환될 필터 문자
strReplace(0)="''"
strReplace(1)=""""""
strReplace(2)="\\"
strReplace(3)="\"&null
strReplace(4)="\#"
strReplace(5)="\--"
strReplace(6)="\;"
data = search
For cnt = 0 to 6 '필터링 인덱스를 배열 크기와 맞춰준다.
data = replace(data, LCASE(strSearch(cnt)), strReplace(cnt))
Next
sqlFilter = data
End Function
loc = Trim(sqlFilter(server.HTMLEncode(Request("loc"))))
이런식으로 사용을 하면
Microsoft VBScript 런타임 오류 error '800a0009'
첨자 사용이 잘못되었습니다.: '[number: 6]'
라는 에러가 떠서
배열 부분을
Dim strSearch(6), strReplace(6), cnt, data
이라 수정을 하면
Microsoft VBScript 런타임 오류 error '800a005e'
Null 값의 사용이 잘못되었습니다.: 'replace'
이라하여
'strSearch(3)=null
'strReplace(3)="\"&null
위 2부분을 주석처리 하였습니다.
저런식으로 해도 위험한 캐릭터들은 다 걸러낼수 있는지요?
본론이 너무 길었습니다..^^
바쁘시겠지만 답변 부탁드립니다.
strSearch(7), strReplace(7) 오 해야합니다.
그리고 보니깐 저 함수가 정통부 권고안이였던가...잘 모르겠지만 아무튼 많이 권고하는 해결방법인데
뭐 한동안은 괜찮을 겁니다.
해킹 방법이 날로 변하다보니...100% 안전하다고 장담은 못합니다 -_-;