2010-07-14 6 views
2

XSS (Cross Site Scripting) 공격으로부터 출력을 필터링하여 htmlentities로 출력을 필터링하고 있습니다. 문제는 응용 프로그램을 utf8과 호환되도록 만드는 것입니다. 데이터베이스에서 가져올 때 유지 관리하고 싶습니다. 이것을 달성하기위한 간단한 해결책이 있습니까? 어떤 조언을 주셔서 미리 감사드립니다.htmlentities가 utf8 문자를 삭제하지 못하도록 방지 ಠ_ಠ

답변

5

세 가지

  1. HTML의 살균은 출력 태스크 탈출하지 필터링 입력된다. 아니요이 작업을 저장하기 전에 수행해야합니다. 표시하기 전에 수행해야합니다.
  2. XSS를 방지하려는 경우 htmlentities() - htmlspecialchars()이면 충분하지 않습니다. htmlentities()은 네이티브 인코딩과 다른 문자 인코딩의 콘텐츠를 렌더링 할 때만 사용됩니다.
  3. Bothfunctions 세 번째 인수로 문자 인코딩을 허용합니다. 그래서, 결국

: 당신이 ENT_NOQUOTES를 사용한 경우

echo htmlspecialchars($content, ENT_QUOTES, 'UTF-8'); 

은 어디 XSS의 일부 유형에 취약해질 수 있습니다.

+0

고마워요 피터, 좋은 정보 – Scarface

+0

ಠ_ಠ ಠ_ಠ ಠ_ಠ ಠ_ಠ ಠ_ಠ – Scarface

+1

-1 이것은 모든 xss를 멈추지 않습니다. 따옴표는 위험합니다. – rook

2

$var=htmlspecialchars($var,ENT_QUOTES,"UTF-8");

+0

그 대기 엔티티는 여전히 출력을 필터링합니까? – Scarface

+0

htmlspecialchars와 htmlentities가 어떻게 다른지 PHP 문서를보십시오. –

+1

@Scarface 아니요, htmlentties()보다 XSS를 중단하는 것이 훨씬 낫습니다. '<> '가 필요하지 않은 경우가 있습니다. 예를 들어, body 태그에 있고'onload ='를 삽입하면, 그것을 방지 할 수 있습니다. – rook

관련 문제