2010-06-22 8 views
3

많은 사이트에서 사용자는 WYSIWYG 또는 태그가있는 일반 텍스트를 통해 서식있는 텍스트를 입력 할 수 있습니다. 당연히 이러한 입력은 보안 위협에 대해 위생 처리되지만 태그가 제거되거나 완전한 엔티티로 인코딩되지는 않습니다. <p>hello world</p>과 같은 내용은 최종 사용자에게 <p>hello world</p>으로 다시 전송됩니다.동적 텍스트에서 태그 강제 닫기

대부분의 WYSIWYG는 내용을 양식으로 바꾸기 전에 XML을 정리할만큼 똑똑하지만 수동 POST 요청, 비 WYSIWYG 텍스트 영역 및 비 JS 사용자는 올바른 방향으로 당김을받지 않습니다 . 따라서 사용자가 <a href="/">을 입력하는 것을 멈추고 페이지의 나머지 부분을 링크로 전환 할 수있는 방법은 없습니다.

이 문제를 치료하는 가장 좋은 방법은 무엇입니까?

답변

2

사용자가 무엇을 제공하든 HTML 파서를 사용하여 구문 분석하십시오. 그것이 DOM 인 동안 위생 처리 한 다음 DOM을 HTML로 다시 직렬화하여 body 요소의 내용 (파서가 필요한 경우 생성합니다)을 최종 사용자에게 보낸 문자열로 가져옵니다. 필요한 모든 요소에는 종료 태그가 있습니다.

+0

한 번만 위생적으로 처리하고 HTML을 캐싱하는 방법을 선호 하겠지만 합리적이라고 생각합니다. 어느 쪽이든, PHP 및/또는 Rails에서이 작업을 수행하는 도구를 권할 수 있습니까? –

+0

아닙니다. PHP 나 Rails도 나의 전문 분야가 아니다. 그렇기 때문에 다양한 언어에 대한 HTML 파서에 대한 많은 질문이 있으므로 주위를 둘러 보거나 새로운 질문을하는 것이 좋습니다. HTML 위생 처리가 DOM에서보다 쉽고 안정적으로 작동하지만, 평판이 좋은 타사 제품을 사용하면 전환 할 필요가 없습니다. 나는 당신의 HTML을 위생 처리하는 것이 좋은 곳인지 지적했다. 일단 사용자의 텍스트가 구문 분석/직렬화 사이클을 거치면 결과를 캐시 할 수 있습니다. – Alohci

0

사용자가 닫지 않은 태그가있는 텍스트를 보내려는 경우 경고 메시지를 보내는 것이 현명합니다. 사용자가 하나의 태그 <br>을 게시하고자 할 경우

, 그것은 <br /> 같은 닫아야합니다. 또는 끝 태그로 별도로 닫아야합니다. </br>.

관련 문제