2011-04-07 2 views
4

모든 사람들이 클라이언트 측 위생 처리를해서는 안된다고 말하기 전에 (실제로 SSJS에서도 작동 할 수는 있지만 실제로 클라이언트에서 처리하려고합니다) 나는 내가하려고하는 것을 분명히한다.자바 스크립트 기반 X/HTML 및 CSS 위생 처리

Google Caja 또는 HTMLPurifier과 비슷하지만 HTML의 경우와 CSS를 처리하는 허용 목록 기반 보안 접근 방식 (물론 안전하지 않지만 처음에는 문자열 형식)을 생성 한 다음 안전하지 않은 태그 또는 속성을 선택적으로 필터링하거나 무시하거나 선택적으로 이스케이프 처리 된 텍스트로 포함하거나 그렇지 않으면 이상적인 컨텍스트에서 추가 처리를 위해 응용 프로그램에보고 할 수 있도록합니다. Google Caja에서와 마찬가지로 자바 스크립트를 안전한 하위 집합으로 줄일 수 있다면 멋지 겠지만 많이 묻습니다.

내 유스 케이스는 JSONP을 통해 얻은 신뢰할 수없는 XML/XHTML 데이터 (위키 처리 전에 Mediawiki wiki에서 가져온 데이터이므로 원시가 아닌 신뢰할 수없는 XML/HTML 입력을 허용 함)를 사용하여 사용자가 해당 데이터에 대해 쿼리 및 변환 XQuery, jQuery, XSLT 등), 오프라인 사용을 허용하기 위해 HTML5를 활용하고, IndexedDB 스토리지 등을 제공하며 사용자가 입력 소스를보고 동일한 페이지에서 결과를 미리 볼 수 있도록합니다. 그들의 검색어를 가져 왔습니다.

사용자는 원하는 출력을 생성 할 수 있으므로 페이지에 JavaScript를 삽입하려는 경우 모든 작업을 수행 할 수 있습니다. 하지만 안전하지 않은 입력을 복사하지 못하도록 허용하면서 신뢰할 수없는 입력의 대상 요소를 안전하게 복사하는 코드를 추가 할 수 있다는 자신감을 갖고 싶은 사용자를 보호하려고합니다.

이 작업은 반드시 수행해야하지만 이미이 작업을 수행하는 라이브러리가 있는지 궁금합니다.

그리고이 중 하나를 구현하지 않았다면 (비록 어느 쪽이든 궁금 하긴하지만) innerHTML을 사용하거나 문서에 삽입하기 전에 추가하는 것이 모든 경우에 안전하다는 증거가 필요합니다. 방법. 예를 들어 DOMParser을 처음 실행하거나 innerHTML을 사용하여 삽입되지 않은 div에 원시 HTML을 추가하여 브라우저 HTML 구문 분석에 의존하면 이벤트가 우연히 트리거 될 수 있습니까? 나는 그것이 안전해야한다고 믿지만, DOM 조작 이벤트가 삽입되기 전에 어쨌든 발생할 수 있는지 확실하지 않다.

물론, 생성 된 DOM은 그 시점 이후에 위생 처리해야하지만, DOM 객체 자체를 안전하게 작성하여 쉽게 탐색 할 수 있는지 확인한 다음 원치 않는 요소, 속성 및 속성 값을 필터링하는 것에 대해 걱정하고 싶습니다. .

감사합니다.

답변

1

ESAPI의 목적은 개발자가 명확하고 일관성 있고 사용하기 쉬운 방식으로 필요한 모든 보안 기능을 제공하는 간단한 인터페이스를 제공하는 것입니다. ESAPI 아키텍처는 매우 간단합니다. 대부분의 응용 프로그램에 필요한 주요 보안 작업을 캡슐화하는 클래스 모음입니다.

OWASP ESAPI의 자바 스크립트 버전 : http://code.google.com/p/owasp-esapi-js

입력 유효성 검사 코드를 넣어 너무 너무 많은 가능한 곳이 있기 때문에 HTML은 쉽게 코드와 모든 시간의 데이터의 최악의 매쉬업입니다 효과적으로 수행하기가 매우 어렵다 많은 다양한 유효한 인코딩. HTML은 계층적일뿐만 아니라 다양한 파서 (XML, HTML, JavaScript, VBScript, CSS, URL 등)를 포함하기 때문에 특히 어렵습니다. 입력 밸리데이션은 중요하며 항상 수행되어야하지만 주입 공격에 대한 완벽한 솔루션은 아닙니다. 을 기본 방어 장치로 사용하여을 이스케이프 처리하는 것이 더 좋습니다.나는 전에 HTML 정수기를 사용하지 않았지만 잘 보였으며 확실히 많은 시간을 투자하여 생각했습니다. 솔루션 서버를 먼저 사용하고 그 후에 원하는 추가 규칙을 적용하십시오. 나는 코드를 작성하기 위해 [ ] ()의 조합을 사용하는 해킹을 보았다. 여기에 더 많은 예가 100 개 있습니다. XSS (Cross Site Scripting) Cheat SheetThe Open Web Application Security Project (OWASP). 조심해야 할 것들이 DOM based XSS Prevention Cheat Sheet입니다.

HTML 정수기는이 혼합 된 인코딩

<A HREF="h 
tt p://6&#9;6.000146.0x7.147/">XSS</A> 

를 해킹 잡는다 그리고 유니 코드의 XSS이 DIV 배경 이미지는

<DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029"> 

당신에 대한 뭘하는지 약간의 공격 : 모든 70 개 가능한 조합을 문자 "<"(HTML 및 JavaScript)

< 
%3C 
&lt 
&lt; 
&LT 
&LT; 
&#60 
&#060 
&#0060 
&#00060 
&#000060 
&#0000060 
&#60; 
&#060; 
&#0060; 
&#00060; 
&#000060; 
&#0000060; 
&#x3c 
&#x03c 
&#x003c 
&#x0003c 
&#x00003c 
&#x000003c 
&#x3c; 
&#x03c; 
&#x003c; 
&#x0003c; 
&#x00003c; 
&#x000003c; 
&#X3c 
&#X03c 
&#X003c 
&#X0003c 
&#X00003c 
&#X000003c 
&#X3c; 
&#X03c; 
&#X003c; 
&#X0003c; 
&#X00003c; 
&#X000003c; 
&#x3C 
&#x03C 
&#x003C 
&#x0003C 
&#x00003C 
&#x000003C 
&#x3C; 
&#x03C; 
&#x003C; 
&#x0003C; 
&#x00003C; 
&#x000003C; 
&#X3C 
&#X03C 
&#X003C 
&#X0003C 
&#X00003C 
&#X000003C 
&#X3C; 
&#X03C; 
&#X003C; 
&#X0003C; 
&#X00003C; 
&#X000003C; 
\x3c 
\x3C 
\u003c 
\u003C 
+0

고마워요. 너무 바쁩니다. 좀 더 자세히 살펴보고 탈출보다는 안전한 HTML을 페이지에 넣을 수 있는지 확인하십시오. 제 목적은 재구성 된 쿼리 결과의 HTML 미리보기를 허용하는 것이지만 도움이 될 것 같습니다. 그렇지 않다면 자바 스크립트가 정말 필요하다고 생각합니다. 나는 오프라인 앱을 위해 불필요한 왕복 여행을하고 싶지 않습니다. 감사! –