2014-09-28 6 views
0

포럼 및 게시물을 가져 왔습니다. HTML을 사용할 수 없습니다.16 진수 HTML 엔터티 만 허용

💗 

참조 : 자세한 정보를 원하시면 http://graphemica.com/%F0%9F%92%97 그러나 일부 사용자는 몇 가지 상징적 인 표시와 같은 진수 HTML 엔티티를 게시 할 수있을 싶습니다.

내 질문은 :

  1. 같은 문자를 허용하려면이 안전이 (.. 등, XSS) 전혀인가?
  2. 허용하는 데 가장 좋은 기능은 무엇입니까? 사실 기호 HTML 엔티티는 일반 텍스트로 나타납니다.
  3. & 또는 » 등을 사용하는 멤버를 허용하지 않으므로 & #으로 시작하여 끝에 숫자와 세미콜론이 오는 html 엔티티 만 허용됩니다.

어떻게 해결할 수 있을까요?

+0

게시 HTML 엔티티는 확실히 문제가되지 않습니다. 나는'&#\d+;'시퀀스와 일치하지 않는 모든 시퀀스에서 앰퍼샌드를 대체하는 정규식을 작성하려고한다. – bwoebi

+0

@bwoebi 답변으로 전체 예제를 제공해 주시겠습니까? preg_replace에 대해 얘기하고있는 것 같군, 그렇지? – lickmycode

+0

질문의 예는 16 진수 엔티티가 아닙니다. 그러한 엔티티는 문자'x' (또는'X')를가집니다. –

답변

1

또 다른 대답은 jQuery .text 메서드를 사용하여 포럼 메시지 요소에 메시지를 추가하는 것입니다. 포럼에서 메시지 구조를 만드는 방법을 변경해야하지만.

모든 문자 시퀀스를 안전하게 추가 할 수 있으며 그 중 아무 것도 브라우저로 HTML로 해석되지 않습니다.

예 :

$('#message_text').text(naughty_msg_string); 
0

이러한 기호 (XSS 등)를 허용해도 안전합니까?

아니요, 절대 안전하지 않습니다. 예를 들어 &은 여전히 ​​앰퍼샌드 인 &의 편리한 별칭입니다. 비슷하게 <은 더 적은 부호이고 따라서 처리 중에 이것을 잊어 버리면 숫자 HTML 개체가 XSS 공격 화면을 열 수있게 해주는 'naively'입니다.

주 ASCII 테이블 (128+) 이외의 숫자 기호 만 허용하는 것이 더 안전 할 수 있습니다.

허용하는 데 가장 좋은 기능은 무엇입니까? 사실 기호 HTML 엔티티는 일반 텍스트로 나타납니다.

위의 기능을 고려하면 preg_replace_callback이 좋은 후보가됩니다. 허용하기 전에 콘텐츠를 테스트 할 수 있기 때문입니다.

또한 정규 표현식의 숫자를 테스트 할 수 있으므로 세 번째 질문에 대한 답을 얻을 수 있습니다.

+0

이것이 내가 16 진수 문자만을 요청한 이유이며 & # 뒤에 6 개의 숫자가 있어야합니다. 더 나은 이해를 위해 $ string의 예를 들어 답을 제공해 주시겠습니까? – lickmycode