2008-10-13 4 views
17

사용자 제출 HTML의 엄격한 (화이트리스트) 유효성 검사/필터링을 수행하기위한 모범 사례를 찾고 있습니다.PHP의 엄격한 HTML 유효성 검사 및 필터링

주된 목적은 웹 양식을 통해 입력 할 수있는 XSS 및 유사 nasties를 필터링하는 것입니다. 보조 목적은 기술이 아닌 사용자가 입력 한 HTML 콘텐츠의 파손을 제한하는 것입니다. HTML보기가있는 WYSIWYG 편집기를 통해.

HTML Purifier을 사용하거나 HTML DOM 파서를 사용하여 HTML (더티) -> DOM (더티) -> 필터 -> DOM (클린) -> HTML 깨끗한).

효과적인 전략을 사용하여 성공을 설명 할 수 있습니까? 조심해야 할 함정이 있습니까?

답변

9

HTML 정수기에서 내가 알고있는 모든 악용 사례를 테스트 해 보았습니다. HTML뿐만 아니라 CSS와 URL도 필터링합니다.

무언가로 요소와 속성을 좁히면 함정은 속성 내용 (java	script:의 프로토콜 이름에 탭 문자가 허용됨)과 JS를 트리거하는 CSS 속성 인 속성 내용 (javascript: 의사 URL)에 있습니다.

URL 구문 분석은 까다로울 수 있습니다. 유효한 값은 http://spoof.com:[email protected] 또는 //evil.com입니다. IDN (Internationalized Domains)은 유니 코드와 punycode의 두 가지 방법으로 작성할 수 있습니다.

HTML 정수기로 이동 -이 중 대부분은 해결되었습니다. 깨진 HTML을 고치고 싶다면 HTML Tidy (PHP 확장으로 사용 가능)를 사용하십시오.

+2

... 힌트 : http://htmlpurifier.org/ – BlaM

+0

답변 해 주셔서 감사합니다. –

+2

2008 년에는 안전하지 못했지만 다음과 같은 결함은 2011 년에 발견되었습니다. http://secunia.com/advisories/43907/, 2010 : http://secunia.com/advisories/39613/ 강의 : 항상 필터 설치를 업데이트하십시오. – Cheekysoft

5

사용자 제출 HTML이 항상 유효하지 않거나 실제로 완료되지는 않습니다. 브라우저는 다양한 범위의 유효하지 않은 HTML을 해석하므로 사용자가이를 포착 할 수 있어야합니다. 또한

인식 유효한 보이는 :

<img src="http://www.mysite.com/logout" /> 

<a href="javascript:alert('xss hole');">click</a> 
+0

감사합니다 로스는 필터링해야하는 입력의 훌륭한 예입니다. 그러나 내가 찾고있는 대답은 방법과 해결책도 포함 할 것입니다. –

+0

첫 번째 예 (코딩 허위 기사 : http://www.codinghorror.com/blog/archives/001171.html)는 실제로 관련이 없습니다. '구멍'은 URL의 성격에 따라 다르므로 이 HTML 스 니펫의 구문보다 –

+0

첫 번째 규칙에 적용 할 수있는 유용한 규칙이 있습니다. 예를 들어 "src 속성이 정규식과 일치 할 때 태그 만 허용//http:\\\/localsite.com\/uploaded_images\/[\w-] * \. (png | jpg | gif) $/i ". –

-1

을 W3C가 여기에 해당 HTML을 검증하기위한 큰 오픈 소스 패키지가 있습니다

http://validator.w3.org/

패키지를 직접 다운로드하여 구현할 수 있습니다. 그들이하는 일은 뭐든간에. 안타깝게도 많은 DOM 파서가 "야생에서"HTML 코드를 할당하는 규칙을 기꺼이 따르는 것처럼 보입니다. 따라서 주인이 무엇이 잘못되었는지 알려주고 그대로 두는 것이 좋습니다. 더 실용적인 도구 - 이 완벽하지 않은 호환 웹 인이 아닌 많은 웹 사이트가 있지만 우리는 여전히 매일 사용합니다.

+3

DTD에 대한 검증은 XSS를 전혀 보호하지 못합니다. – Kornel

+0

바리가 유효성 검사에서 의미하는 바를 생각하지 않습니다. 표준 유효성 검사가 아닌 데이터 유효성 검사 또는 심사를 생각하십시오. 그래도 잘못된 형식의 HTML에 도움이 될 것입니다.) – Ross

1

나는 HTML 정수기를 성공적으로 사용했으며 xss 또는 기타 원치 않는 입력 필터를 사용하지 않았습니다. 또한 Tidy 확장을 통해 HTML 유효성을 검사하여 유효성을 검사하는지 확인합니다.

관련 문제