Ewebeditor 및 fckeditork 편집기는 작은따옴표를 필터링합니다.
SQL=insert into product(title,content) value(' &request(title)& ',' &request(content)& ')라는 작성 방법을 사용하여 당시 고객이 에디터에 COPY한 내용을 찾아냈습니다. , 그리고 놀랍게도 이 콘텐츠에는 작은따옴표가 포함되어 있다는 사실이 밝혀졌습니다. 이는 고객이 편집자에게 제출한 콘텐츠에 원래 SQL=insert into와 동일한 SQL 문이 변경된 작은따옴표가 포함되어 있었기 때문인 것으로 나타났습니다. 제품(제목, 콘텐츠) 값('콘텐츠') ,'content')는 SQL=insert into product(title,content) 값('content','content'')이 됩니다. 자세히 살펴보면 내용에 작은따옴표가 하나 더 있다는 사실을 알 수 있습니다. 심각한 쓰기 오류가 발생했습니다. 그러나 잘못 작성되었기 때문에 SQL 문에서 오류 메시지가 표시되지 않고 작업이 성공했다는 메시지도 표시되는 것도 놀랍습니다. 2003년의 흔한 작은 해커들을 생각해 보세요. 'or' =' or'를 사용하는 것을 좋아합니다. 백엔드 침입 방식은 SQL 실행 시 작은따옴표가 필터링되지 않는 버그를 활용한 것 같습니다. 결과적으로 SQL을 어떻게 실행해도 결과가 true로 반환되는군요. 프로그램을 작성하는 것은 가능한 한 간단하고 명확해야 하는데, 이것도 실수입니다. 자, 문제가 발견되었습니다. 이제부터 모든 SQL이 데이터베이스에 입력되기 전에 필드를 필터링한 후 값을 전달하므로 이러한 문제가 다시 발생하지 않습니다. 다음은 매우 완전한 SQL 보안 필터링입니다. 함수를 호출하면 됩니다.
함수 HTMLEncode(Str)
If Isnull(Str) 그렇다면
HTML인코드=
종료 기능
종료 조건
Str = 바꾸기(Str,Chr(0),, 1, -1, 1)
Str = 바꾸기(Str, , ", 1, -1, 1)
Str = 바꾸기(Str,<,<, 1, -1, 1)
Str = 바꾸기(Str,>,>, 1, -1, 1)
Str = 바꾸기(Str, script, script, 1, -1, 0)
Str = 바꾸기(Str, SCRIPT, SCRIPT, 1, -1, 0)
Str = 바꾸기(Str, Script, Sscript, 1, -1, 0)
Str = 바꾸기(Str, script, Script, 1, -1, 1)
Str = 바꾸기(Str, 객체, 객체, 1, -1, 0)
Str = 바꾸기(Str, OBJECT, OBJECT, 1, -1, 0)
Str = 바꾸기(Str, Object, Oobject, 1, -1, 0)
Str = 바꾸기(Str, object, Oobject, 1, -1, 1)
Str = 바꾸기(Str, 애플릿, applet, 1, -1, 0)
Str = 바꾸기(Str, APPLET, APPLET, 1, -1, 0)
Str = 바꾸기(Str, Applet, Applet, 1, -1, 0)
Str = 바꾸기(Str, 애플릿, Applet, 1, -1, 1)
Str = 바꾸기(Str, [, [)
Str = 바꾸기(Str, ], ])
Str = 바꾸기(Str, , , 1, -1, 1)
Str = 바꾸기(Str, =, =, 1, -1, 1)
Str = 바꾸기(Str, ', '', 1, -1, 1)
Str = 바꾸기(Str, 선택, 선택, 1, -1, 1)
Str = 바꾸기(Str, 실행, execute, 1, -1, 1)
Str = 바꾸기(Str, exec, exec, 1, -1, 1)
Str = 바꾸기(Str, Join, join, 1, -1, 1)
Str = 바꾸기(Str, Union, un'on, 1, -1, 1)
Str = 바꾸기(Str, where, wh're, 1, -1, 1)
Str = 바꾸기(Str, insert, insert, 1, -1, 1)
Str = 바꾸기(Str, delete, del'te, 1, -1, 1)
Str = 바꾸기(Str, 업데이트, 업데이트, 1, -1, 1)
Str = 바꾸기(Str, like, like, 1, -1, 1)
Str = 바꾸기(Str, drop, drop, 1, -1, 1)
Str = 바꾸기(Str, create, create, 1, -1, 1)
Str = 바꾸기(Str, 이름 바꾸기, 이름 변경, 1, -1, 1)
Str = 바꾸기(Str, count, count, 1, -1, 1)
Str = 바꾸기(Str, chr, chr, 1, -1, 1)
Str = 바꾸기(Str, mid, mid, 1, -1, 1)
Str = 바꾸기(Str, truncate, trunc'te, 1, -1, 1)
Str = 바꾸기(Str, nchar, nch'r, 1, -1, 1)
Str = 바꾸기(Str, char, ch'r, 1, -1, 1)
Str = 바꾸기(Str, alter, alter, 1, -1, 1)
Str = 바꾸기(Str, Cast, ca't, 1, -1, 1)
Str = 바꾸기(Str, 존재함, exists, 1, -1, 1)
Str = 바꾸기(Str,Chr(13), , 1, -1, 1)
HTMLEncode = 바꾸기(Str,','', 1, -1, 1)
기능 종료