2011-01-06 2 views
3

회원 페이지 시스템을 업데이트했습니다. 요구 사항 중 하나는 특정 필드에 굵게, 밑줄, 기울임 꼴, 글꼴 색 및 링크를 허용하는 것이지만 은 글꼴 크기 또는 스타일이 아닌입니다.이 모든 것은 WYSIWYG 편집기로 수행됩니다. 이것은 원래 textarea와 최소한의 HTML 필터링을 사용하여 수행되었습니다. 즉, 을 사용하여 <script>을 제거하십시오. 미쳤고 확실히 안전하지 않습니다.사용자가 BBCode 또는 HTML을 WYSIWYG와 함께 게시 할 수있게 하시겠습니까?

TinyMCE를 사용하고 TinyMCE 내에서 특정 태그를 허용하지 않는 유일한 수정 사항은 TinyMCE에 대한 유효성 검사기로 TinyMCE에 의존 할 수없고 XSS에 대한 HTML 입력을 보안 할 수 없다는 것입니다. 지난 1 시간 동안 특정 사례를 읽은 적이 있는데 현재 프로필을 엉망으로 만들지 않고 특정 HTML 태그/특성을 허용하고 글꼴 크기와 같은 다른 사용자 지정을 허용하지 않는 것이 거의 불가능한 것처럼 보입니다. 그리고 인라인 스타일의 물건. 예를 들어 span 태그로 글꼴 색상을 허용해야하지만 style 속성을 허용하면 CSS가 허용됩니다.

이제는 출력에 htmlspecialchars()을 안전하게 적용하고 [b]에 대한 BBCode 파서로 생성되는 HTML을 완전히 제어 할 수 있으므로 WYSIWYG 편집기에서 BBCode를 사용하는 아이디어로 얼룩지게했습니다. , [u], [i] 및 [color] 태그는 줄 바꿈을 위해 nl2br()입니다.

유일한 문제는 현재 HTML 설정을 BBCode로 변환하는 코드를 작성해야한다는 것입니다.

필자의 주요 질문은 BBCode가 XSS 공격으로부터 보호하기에 앞서 설명한 단계입니까? 아니면 내가 사용할 수있는 좀 더 우아하고 분명한 HTML 보안 방법이 있습니까?

답변

4

당신은 HTML Purifier 라이브러리를 사용할 수 있습니다 (예 : htmlspecialchars로 위험한 태그 대신에 맹목적으로 전체 내용 노드에 적용). 헤비급이지만 "스타일 태그의 색상 설정 만 허용"과 같은 규칙을 허용합니다. 그것은 철저히 테스트되고 적극적으로 개발되었습니다.

+0

이것은 내 관심사와 관련이 있습니다. 어떻게해야할까요? – Dunhamzzz

1
HTML로

저장을하고, 적절한 HTML 파서를 사용 (같은 DOMDocument가) 위험 태그를 제거하는

+0

이것은 처음에 한 일이지만 사용자가 글꼴 색을 변경할 수는 있지만 스타일 속성에 무엇이든 넣을 수있는 능력은 없습니다. 나는이 질문을 명확하게 만들었습니다. – Dunhamzzz

+0

[DOMAttr] (http://php.net/manual/en/class.domattr.php) – ajreal

+0

+1 여전히 사용할 수 있습니다. 그러나 더 좋은 것은 포괄적 인 것입니다 - - 배타적이지 않아. –