2014-01-21 10 views
1

내 웹 사이트의 의견 상자 양식에서 의견을 표시하려고합니다. 원래는 다음을 사용하여 표시했습니다 :htmlentities 및 htmlspecialchars가 텍스트 표시를 중지합니다.

<?php while($comment_text = mysqli_fetch_assoc($display_comments)) { ?> 
<div class="comment" style="margin-bottom: 2em;"> 
    <div class="author"> 
     <b><?php echo htmlentities($comment_text["author"]); ?></b> 
    <span class="datetime"> 
     <i><?php echo datetime_to_text($comment_text["created"]); ?></i> 
    </span> 
    </div> 
    <div class="body"> 
     <?php echo strip_tags($comment_text["body"], '<strong><em><p>'); ?> 
    </div> 
</div> 
<?php } ?> 

여기서 "body"텍스트가 표시 될 때 "strip_tags"를 사용합니다. 그러나 htmlentities 또는 htmlspecialchars 대신 안전하게 사용해야한다고 들었습니다.하지만 "strip_tags"를 대체 할 때마다 주석이 표시되지 않습니다. 단지 주석의 작성자를 보여 주며 그 아래에는 아무것도 표시하지 않습니다.

양식이 제대로 작동하고 내 데이터베이스에 게시 할 때마다 "mysqli_real_escape_string"을 사용합니다. htmlentities 또는 htmlspecialchars를 사용할 때 데이터베이스에 주석이 표시됩니다.

나는 php에서 꽤 새로운데, 내 양식이 안전한지 확인하고 싶습니다. 어떤 도움을 주시면 감사하겠습니다!

업데이트 : 다른 테스트 의견을 표시하려고 시도했습니다. 내가 반드시 htmlspecialchars를 사용할 때 아무것도는 "테스트"와 같은 단순한 뭔가의 경우에도 표시되지 않습니다

답변

1
당신이 사용하고자하는 것을 선택해야합니다

: 어느 일부 HTML 태그를 허용하고 htmlspecialchars를 사용할 수 없거나 htmlspecialchars을 사용 할 html을 허용하지 않습니다.

첫 번째 옵션에는 xss의 위험이 있으므로 콘텐츠를 신뢰할 수없는 경우에는 사용하지 말아야합니다.

htmlspecialchars을 사용하면 모든 특수 문자가 인코딩되므로 일부 텍스트를 볼 수없는 대신 브라우저에서 렌더링 된 텍스트를 둘러싼 대담한 열기 및 닫기 태그가 그대로 표시됩니다.

+0

hmlspecialchars를 사용하는 것이 가장 좋음을 이해합니다. 왜 내 텍스트가 전혀 표시되지 않는지 이해할 수 없습니다. 나는 정말로 간단한 텍스트, HTML 태그 또는 아무것도 사용하지 않고 테스트했지만 아무것도 표시하지 않았다. – coolpup

+0

@coolpup 함수에서 두 번째 인수를 제거 했습니까? – jeroen

+0

strip_tags를 원하십니까? htmlspecialchars로 대체했습니다. – coolpup