Ewebeditor 및 fckeditork 작은 따옴표 문제 해결 방법

Ewebeditor 와 fckeditor,90%의 사 이 트 는 모두 이 두 가지 편집 기 를 제품 이나 내용 의 설명 부분 으로 하 는 편집 창 입 니 다.최근 에 한 고객 의 대외무역 사이트 가 거의 완공 되 었 습 니 다.고객 의 제품 분류 가 많아 서 고객 스스로 백 스테이지 에 제품 을 추가 하 게 했 습 니 다.그러나 고객 의 반응 은 백 스테이지 에 제품 을 추가 할 때 제품 설명 내용 이 너무 복잡 하면...제품 은 아무리 해도 데이터베이스 에 추가 할 수 없다.그 당시 에 우 리 는 답답 했다.어떻게 된 일 인지 우 리 는 백 스테이지 에 임의의 제품 이나 문 자 를 추가 하 는 데 성공 할 수 있 는 지 직접 테스트 했다.하필 이면 그 는 안 되 었 다.사이트 에서'Ewebeditor 는 데이터 베 이 스 를 추가 할 수 없다'는 것 과 관련 된 답 을 찾 은 것 같 았 다.Ewebeditor 자체 가 따옴표 에 대한 여과 가 없 기 때문에 데이터 베 이 스 를 추가 하지 못 하 는 문제 가 생 겼 다.그래서 우 리 는 편집 기 를 fckeditor 로 바 꾸 었 지만 안 됩 니 다.그것 은 Ewebeditor 와 fckeditor 가 자체 적 으로 가지 고 있 는 불완전 으로 인 한 것 입 니까?왜 간단 한 따옴표 가 데이터 베 이 스 를 추가 할 수 없 게 만 들 었 을 까?여기 서 우 리 는 입고 코드 를 분석 해 보 았 다.우 리 는 SQL=insert into produt(title,content)values('&request('title')&','&request('content')&')의 쓰기 방법 을 사용 했다.그래서 우 리 는 고객 이 편집기 에 들 어 갔 을 때의 내용 을 찾 아 보 았 다.역시 이 내용 에는 작은 따옴표 가 포함 되 어 있 습 니 다.원래 고객 이 편집기 에 제출 한 내용 에 작은 따옴표 가 포함 되 어 있 기 때문에 우리 의 SQL 문 구 는 변 했 습 니 다.SQL=insert into product(title,content)values('내용','내용')가 SQL=insert into product(title,content)values('내용','내용')가 된 것 과 같 습 니 다.자세히 보면 알 수 있 습 니 다.이 콘 텐 츠 에 작은 따옴표 가 하나 더 있 기 때문에 SQL 문 구 는 심각 한 쓰기 오류 가 발생 했 습 니 다.그러나 우 리 는 이상 합 니 다.그 가 쓰 는 방법 이 잘못 되 었 는데 왜 SQL 문 구 는 잘못된 힌트 를 주지 않 았 습 니까?조작 성공 을 알 렸 습 니 다.여기 서 우 리 는 2003 년 몇 년 동안 보편적 인 해커 들 이 즐겨 사용 하 는'or'='or'의 백 스테이지 침입 법 을 생각 했 습 니 다.바로 SQL 을 이용 하여 실 행 했 을 때 따옴표 가 걸 러 지지 않 은 BUG 로 인해 SQL 이 어떻게 실 행 했 는 지 결 과 는 모두 진실 로 돌 아 왔 습 니 다.하하,생각 지도 못 했 습 니 다.프로그램 을 쓸 때 가능 한 한 간단명료 하 게 그림 을 그 리 는 것 도 잘못 이 라 고 생각 했 습 니 다.자,문 제 를 찾 았 습 니 다.앞으로 SQL 이 입고 되 기 전에 우 리 는 필드 를 걸 러 낸 후에 값 을 전달 하면 다 시 는 이런 문제 가 발생 하지 않 을 것 입 니 다.다음은 매우 완벽 한 SQL 안전 여과 함수 입 니 다.여러분 이 직접 가 져 가면 호출 할 수 있 습 니 다
 
Function HTMLEncode(Str)
If Isnull(Str) Then
HTMLEncode = ""
Exit Function
End If
Str = Replace(Str,Chr(0),"", 1, -1, 1)
Str = Replace(Str, """", """, 1, -1, 1)
Str = Replace(Str,"<","&lt;", 1, -1, 1)
Str = Replace(Str,">","&gt;", 1, -1, 1)
Str = Replace(Str, "script", "&#115;cript", 1, -1, 0)
Str = Replace(Str, "SCRIPT", "&#083;CRIPT", 1, -1, 0)
Str = Replace(Str, "Script", "&#083;cript", 1, -1, 0)
Str = Replace(Str, "script", "&#083;cript", 1, -1, 1)
Str = Replace(Str, "object", "&#111;bject", 1, -1, 0)
Str = Replace(Str, "OBJECT", "&#079;BJECT", 1, -1, 0)
Str = Replace(Str, "Object", "&#079;bject", 1, -1, 0)
Str = Replace(Str, "object", "&#079;bject", 1, -1, 1)
Str = Replace(Str, "applet", "&#097;pplet", 1, -1, 0)
Str = Replace(Str, "APPLET", "&#065;PPLET", 1, -1, 0)
Str = Replace(Str, "Applet", "&#065;pplet", 1, -1, 0)
Str = Replace(Str, "applet", "&#065;pplet", 1, -1, 1)
Str = Replace(Str, "[", "&#091;")
Str = Replace(Str, "]", "&#093;")
Str = Replace(Str, """", "", 1, -1, 1)
Str = Replace(Str, "=", "&#061;", 1, -1, 1)
Str = Replace(Str, "'", "''", 1, -1, 1)
Str = Replace(Str, "select", "sel&#101;ct", 1, -1, 1)
Str = Replace(Str, "execute", "&#101xecute", 1, -1, 1)
Str = Replace(Str, "exec", "&#101xec", 1, -1, 1)
Str = Replace(Str, "join", "jo&#105;n", 1, -1, 1)
Str = Replace(Str, "union", "un&#105;on", 1, -1, 1)
Str = Replace(Str, "where", "wh&#101;re", 1, -1, 1)
Str = Replace(Str, "insert", "ins&#101;rt", 1, -1, 1)
Str = Replace(Str, "delete", "del&#101;te", 1, -1, 1)
Str = Replace(Str, "update", "up&#100;ate", 1, -1, 1)
Str = Replace(Str, "like", "lik&#101;", 1, -1, 1)
Str = Replace(Str, "drop", "dro&#112;", 1, -1, 1)
Str = Replace(Str, "create", "cr&#101;ate", 1, -1, 1)
Str = Replace(Str, "rename", "ren&#097;me", 1, -1, 1)
Str = Replace(Str, "count", "co&#117;nt", 1, -1, 1)
Str = Replace(Str, "chr", "c&#104;r", 1, -1, 1)
Str = Replace(Str, "mid", "m&#105;d", 1, -1, 1)
Str = Replace(Str, "truncate", "trunc&#097;te", 1, -1, 1)
Str = Replace(Str, "nchar", "nch&#097;r", 1, -1, 1)
Str = Replace(Str, "char", "ch&#097;r", 1, -1, 1)
Str = Replace(Str, "alter", "alt&#101;r", 1, -1, 1)
Str = Replace(Str, "cast", "ca&#115;t", 1, -1, 1)
Str = Replace(Str, "exists", "e&#120;ists", 1, -1, 1)
Str = Replace(Str,Chr(13),"<br>", 1, -1, 1)
HTMLEncode = Replace(Str,"'","''", 1, -1, 1)
End Function

좋은 웹페이지 즐겨찾기