2012-07-14 2 views
5

특정 페이지에 대해 자바 스크립트를 사용하지 못하도록하는 HTTP 헤더가 있습니까? 내 웹 사이트는 사용자가 생성 한 HTML 콘텐츠를 전달하므로 (htmlenitities 만 사용할 수없는 이유) 스크립팅 (자바 스크립트 삽입)을 방지하고 싶습니다.특정 페이지에서 자바 스크립트 실행을 비활성화하십시오 (HTML/PHP)

쿠키가 읽을 수없는 하위 도메인에만 사용자 콘텐츠가 표시되지만 HttpOnly 쿠키는 이미 주 도메인에서만 인증을 위해 설정되어 있습니다. 문제는 JavaScript를 실행할 수있는 가능성이 너무 많다는 것입니다. 예를 들어 onclick과 같은 이벤트 속성을 사용하는 경우와 Internet Explorer가 CSS에서 JavaScript 스크립트를 실행할 수있는 속성이있는 경우 (예 : 들어 본 적이없는 경우)가 있습니다. 내가 읽은 또 다른 흥미로운 아이디어는 다음 코드를 차단하기 위해 예외를 던지는 것이었다. 더 많은 아이디어가 허용 된 모든 태그를 포함하는 목록을 정의하는 것입니다. 그리고 각 허용 된 속성 이름을 가진 배열을 추가로 작성하는 것이 매우 어렵고 가능한 모든 인젝션을 다루지는 못합니다.

나는이 문제가있는 유일한 사람이 아니기 때문에 아무도 가능성을 알 수 있습니까 가능한 유해한 코드 - 적어도 현대적인 브라우저에서는?

X-Scripting: disabled과 비슷한 단순한 가상의 헤더가 훨씬 더 쉽게 생명력을 발휘할 것입니다!

+0

사용자 입력에서'script' 태그와 특정 속성을 차단 한 적이 있습니까? –

+0

그게 바로 제가 생각한 것입니다. "허용 된 모든 태그를 포함하는 목록을 정의하는 것 외에 허용 된 각 속성 이름을 가진 배열을 추가로 정의하는 것이 더 좋을 것입니다.하지만 이것은 매우 힘든 일이며 가능한 모든 주입을 다루지는 못합니다." (예를 들어, 예를 들어 "div"또는 "span"과 같은 무해한 태그를 허용하고 "onclick", "onmouseover"와 같은 속성을 비활성화 할 수 있지만 브라우저마다 브라우저 특정 속성과 속성이 다르므로 모든 주사를 포함하지는 않습니다) –

답변

2

예, Content Security Policy이라는 실험용 HTTP 헤더가 있습니다.이 헤더를 사용하면 JavaScript가 어디에서 오는 것인지 제어 할 수있어 XSS를 불가능하게 만들 수 있습니다. 그러나 현재 Chrome 및 Firefox에서만 지원됩니다.

HttpOnly 쿠키를 사용하는 것이 좋지만 ZERO 공격을 막을 수는 있습니다. reading CSRF tokens, and carrying out requests with an XHR으로 XSS를 악용 할 수 있습니다.

XSS를 구하는 방법에는 여러 가지가 있으며, ShieldSeal과 같은 취약점 스캐너를 사용하면 (거의) 찾을 수 있습니다. Skipfish은 오픈 소스 취약점 스캐너로 매우 원시적이지만 무료입니다. 이것이 대부분의 웹 응용 프로그램이 널리 퍼진 취약점을 처리하는 방법입니다. (나는 SheildSeal을 위해 일하고 그들의 취약성 스캐너를 만드는 것을 도우며 내 일을 좋아한다.)

문제가 발견되면 htmlspecialchars($var) 또는 htmlspecialchars($var,ENT_QUOTES)을 사용하여 입력을 살균해야합니다. ENT_QUOTES는 공격자가 onclick 또는 다른 JavaScript 이벤트를 도입하는 것을 막을 수 있습니다.

+0

유일한 문제는 사용자가 HTML 컨텐트를 생성 할 때 가능한 한 자유롭지 만 동적 클라이언트 측 코드를 실행하지 않아야한다는 것입니다. SQL 주입이나 PHP 주입은 코드가 .php 파일이 아닌 데이터베이스에 저장되고 모든 매개 변수가 SQL 문에서 사용되기 전에 정리되기 때문에 문제가되지 않습니다. 예를 들어'img' 태그에'src'와 같은 필수 속성이 있습니다. 간단히'ENT_QUOTES'를 사용할 수없고 모든 입력을 삭제할 수 없습니다. 그러나 적어도 Firefox/Chrome-Users의 경우 내 사이트를 보호하기 위해 콘텐츠 보안 정책에 대해 더 자세히 읽어 보겠습니다. –

+0

@Birk oah 내가 잘못 읽은 다음 HTMLPurifier를 사용하려고합니다. 또한 일반적으로 사용시에 위생 처리해야하므로 xss 출력물을 위생적으로 처리해야합니다.그러나 HTMLPurifier는 많은 리소스를 사용하므로 데이터베이스에 삽입하기 전에이를 사용해야합니다. – Mikey

+0

@Birk, HTML/CSS를 안전하게 삽입하기 위해 Google Caja 프로젝트를 확인해 볼 수도 있습니다. https://developers.google.com/caja/ – JackWink

관련 문제