문제

현재 사용자가 사이트에 표시되는 게시물 및 의견을 제출 해야하는 응용 프로그램을 진행 중입니다. 우리는 모두 사용자 입력을 신뢰할 수 없으므로 HTMLSpecialchars ($ string, ENT_QUOTES)를 사용하여 사용자의 게시물 및 댓글을 처리했습니다.

이제 특정 HTML 태그를 무시하고 싶습니다. ~와 같은 <b><br /> 그리고 몇 개의 태그가 더 있습니다. htmlspecialchars가 다른 태그를 필터링하는 동안 일부 태그를 무시하도록 어떻게해야합니까?

도움이 되었습니까?

해결책

해결책 A)
HtmlSpecialchars에 주입 된 Strip_tags를 사용하고 필요한 태그를 화이트리스트에 올리십시오.
더 나은 해결책 b)
bbcodes를 사용하고 원하는 태그에 별명을 부여하십시오.

다른 팁

그것은이다 매우 어렵습니다 스크립트 주입 등의 가능성을 허용하지 않고 일부 HTML 태그 만 허용합니다.

나는 실제로 이것을 피하고 다음과 같이 HTML을 생성하는 것을 사용하는 것이 좋습니다. 이 UBB 코드 파서 (또는 이와 유사). 또는 가격 인하 (HTML 옵션이 꺼져 있음).

이는 공격자가 귀하의 사이트에 부딪 칠 수있는 범위를 제공하지 않으며, 이는 공개적 인 경우 매우 중요합니다.

일부 HTML조차 허용한다면 결정된 공격자가이를 위해 길을 찾을 수 있습니다.

부족하거나 안전하지 않은 HTML 필터의 현재 환경으로 인해 BBCode 사용에 지쳤습니까?
--> HTML 정화기

HTML 정화기는 PHP로 작성된 표준 호환 HTML 필터 라이브러리입니다. HTML Purifier는 철저하고 감사하지만 안전한 화이트리스트를 사용하여 모든 악성 코드 (XSS로 더 잘 알려짐)를 제거 할뿐만 아니라 ...

인용 된 문자열을 교체하여 허용되는 태그를 다시 삽입 할 수 있습니다. 을 위한 <b> 예를 들어 태그 :

$string = str_replace(array('&lt;b&gt;', &lt;/&gt;), array('<b>', '</b>'), $string);

나는 매우 독특하고 완전한 태그를 가능한 한 안전하게 허용합니다. 즉, 정규 표현을 사용하지 않아도되면 매우 불쾌한 버그로 이어질 수 있습니다.

사용자 입력을 통한 필터링에 zend_filter를 사용하는 것이 좋습니다. 구체적으로, 참조 :http://framework.zend.com/manual/en/zend.filter.html#zend.filter.introduction.using

이것은 당신이 할 수있는 것만 큼 단순하지 않습니다. htmlspecialchars() ...도 아니다 htmlentities() 특정 태그를 무시할 수있는 옵션을 제공합니다 (두 기능 모두 개념의 의미조차 알지 못합니다. 태그).

다른 수단을 사용하여 사용자가 게시물을 포맷 할 수 있습니다. bbcode, 직물 또는 가격 인하. PHP 파서가 모두 있습니다.

HTML- 태그를 고수해야한다면 허용되는 태그를 재구성하여 영향을받지 않도록 전처리에 의지 할 수 있습니다. htmlspecialchars(). 그런 다음 결과를 사후 처리하여 형식을 일반 HTML-TAG로 다시 변경할 수 있습니다. 다음 샘플은이 프로세스를 간단하게 시각화합니다 <a>-꼬리표. 일반 표현식으로 HTML을 처리하는 것이 오류가 발생하기 쉬우 며 항상가는 길은 아닙니다.이 예에서 단순성을 위해서만 사용하겠습니다.

$input = preg_replace('~<(/?\w+([^>]*?))>~', '|#$1#|', $input);
$input = htmlspecialchars($input);
$inoput = preg_replace('~|#(/?\w+(.*?))#|~', '<$1>', $input);

이것은 테스트되지 않았으며 더 많은 작업이 필요합니다.

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