2014-06-23 4 views
0

Mysqli의 준비된 문을 사용하고 있습니다. 입력을 텍스트로 가져 와서 텍스트로 제출하여 SQL 주입을 방지합니다.HTML에서 태그 및 스크립트가 실행되지 않도록하려면 어떻게해야합니까?

데이터베이스에서 텍스트를 읽을 때 문제가 발생합니다. 내가 읽은 텍스트가 브라우저에서 실행됩니다! -

예를 들어

내가 입력으로 작성하는 경우 : 그대로

<b>Hello</b> how r u?<br> 
<script> alert('He is fine dnt wry!') </script> 

이 데이터베이스로 들어갑니다. 그러나 내 SELECT 쿼리를 사용하여 데이터베이스에서 다시 읽음으로써이를 표시하는 대신 내 <b> 태그와 <script> 태그가 실행됩니다.

어떻게 이런 일이 일어나지 않도록 할 수 있습니까?

+2

'를 htmlentities()'또는'반드시 htmlspecialchars()'어쩌면? – AbraCadaver

+0

어느 것이 더 낫습니까? – jackkorbin

+0

HTML을 승인하려면 HTML Purifier로 정리하거나 다른 언어를 수락하십시오. Markdown이 널리 사용되고 있으며 PHP에서 사용할 수있는 파서가 여러 개 있습니다. – halfer

답변

0
echo htmlentities("<b>Hello</b> how r u?<br> 
<script> alert('He is fine dnt wry!') </script>"); 
0

화면에 코드를 렌더링하기 전에 다음 코드를 사용할 수 있습니다.

string htmlspecialchars_decode (string $string [, int $flags = ENT_COMPAT | ENT_HTML401 ]) 

그의 기능은 htmlspecialchars()와 반대입니다. 특별한 HTML 엔터티를 다시 문자로 변환합니다.

체크 아웃 수동 here

+0

그러나 왜 디코드합니까? http://stackoverflow.com/questions/1996122/how-to-prevent-xss-with-html-php 답변이 뭔가 다른 것을 보여 줍니까? – jackkorbin

+1

이것이 잘못된 것 같습니다. dev가 HTML이 아닌 텍스트를 받아들이 길 원한다면, 템플릿 파일에서'htmlspecialchars' 나'htmlentities'가 적절합니다. 그래서 꺽쇠 괄호가 엔티티로 출력됩니다. dev가 HTML을 허용하려면 HTML을 정리하거나 Markdown (또는 유사)으로 승인 한 다음 HTML로 변환해야합니다. – halfer

관련 문제