문제

C++에서 간단하고 효율적인 XSS 필터를 구현해야 합니다. CppCMS.C ++를 사용하는 고성능 프레임 워크이기 때문에 PHP로 작성된 기존 고품질 필터를 사용할 수 없습니다.

기본 아이디어는 HTML 태그 목록 과이 태그의 흰색 옵션 목록이있는 필터를 제공하는 것입니다.예를 들어.일반적인 HTML 입력은 다음으로 구성될 수 있습니다.<b>, <i>, 태그 및 <a> 태그를 달다 href.그러나 간단한 링크에 XSS가 포함될 수 있기 때문에 간단한 구현은 충분하지 않습니다.

<a href="javascript:alert('XSS')">Click On Me</a>

다른 많은 예를 찾을 수 있습니다 거기.그래서 href/src와 같은 태그에 대한 접두사 화이트리스트를 생성할 수도 있습니다. 그래서 항상 다음으로 시작하는지 확인해야 합니다. (https?|ftp)://

질문:

  • 이러한 가정이 대부분의 목적에 충분합니까?내가 옵션을 제공하지 않는다면 style 태그를 지정하고 화이트 접두사 목록을 사용하여 src/href를 확인하면 XSS 문제가 해결됩니까?이 방법으로 해결할 수 없는 문제가 있나요?
  • HTML/XHTML의 공식 문법에 대한 좋은 참조가 있습니까? <script>
도움이 되었습니까?

해결책

Anti Samy 프로젝트를 살펴보고 동일한 작업을 수행할 수 있습니다.하지만 Java와 .NET입니다.

편집 1, 약간의 추가 :

잠재적으로 매우 엄격한 화이트리스트가 나올 수 있습니다.구조가 잘 잡혀 있어야 하며 매우 빡빡하고 유연성이 없어야 합니다.유연성과 많은 태그, 속성 및 다양한 브라우저를 결합하면 일반적으로 XSS 취약점이 발생합니다.

귀하의 요구 사항이 무엇인지는 모르지만 엄격하고 간단한 태그 지원(b li h1 등만)을 선택한 다음 태그를 기반으로 한 엄격한 속성 지원(예: src는 href 태그에서만 유효함)을 사용하겠습니다. 그런 다음 http|https|ftp 또는 style="color| background-color" 등을 명시한 대로 속성 값에 화이트리스트를 작성해야 합니다.

이것을 고려하십시오:

<x style="express/**/ion:(alert(/bah!/))">

또한 인코딩이 다르면 어색한 문제가 발생할 수 있으므로 일부 문자 허용 목록 또는 일부 UTF-8 정규화에 대해 고려해야 합니다.속성의 새 줄, 유효하지 않은 UTF-8 시퀀스 등.

다른 팁

HTML 파싱의 모든 세부 사항은 다음과 같습니다 HTML 5에 지정됩니다. 그러나 그것의 구현은 많은 작업이며, 모든 코너 케이스와 정확히 HTML을 구문 분석할지 여부는 중요하지 않습니다. 최악의 경우 다른 DOM으로 끝나지 만 어쨌든 DOM을 소독해야합니다.

당신이 언급했듯이, 이것의 다양한 PHP 구현이 있지만, C ++에서는 알지 못합니다. 일반적으로 웹 개발에 적용되는 언어가 아니기 때문입니다. 전반적으로, 그것은 당신이 구현하려는 구현의 복잡한 방법에 달려 있습니다.

매우 제한적인 화이트리스트는 아마도 "가장 간단한"방법 일 것입니다. 그러나 실제로 포괄적이기를 원한다면, 정식 버전 중 하나를 C ++로 전환하는 것을 살펴 보겠습니다. 걱정할 속임수가 너무 많아서 이미 모든 것을 겪은 다른 사람들의 어깨에 서있는 것이 더 좋을 것이라고 생각합니다.

웹 개발에 C ++를 사용하는 것에 대해서는 아무것도 모르지만 PHP를 전환하는 것은 특히 어려운 작업이 아닌 것처럼 보이지 않습니다. PHP에는 C ++가 복제 할 수없는 마법의 기능이 없습니다. 나는 작은 히치가있을 것이라고 확신하지만, 전반적으로 더 복잡한 경로로 가고 싶다면 처음부터 풀 디자인보다 전환하는 것이 더 빠릅니다.

HTML 정화기 여전히 적극적으로 유지되는 강력한 PHP 구현처럼 보이지만 비교 문서 저자가 그의 접근 방식과 다른 사람들의 차이점에 대해 논의하는 경우, 아마도 읽을 가치가 있습니다.

당신이 무엇을 생각해든지, 당신이 연결하는 모든 예제로 확실히 테스트하고 그것이 모든 것을 통과 시키는지 확인하십시오. 행운을 빕니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top