2011-02-03 2 views
25

안녕 htmlspecialchars()를 사용할 적절한 장소가 언제인지 궁금합니다. 데이터를 데이터베이스에 삽입하기 전에 또는 데이터베이스에서 데이터를 검색하기 전에 있습니까?htmlspecialchars() 함수를 언제 사용합니까?

+1

필요한 경우. –

답변

26

데이터를 HTML에 에코 할 때만이 메서드를 호출해야합니다.

데이터베이스에 이스케이프 된 HTML을 저장하지 마십시오. 그것은 질의를 더 성가 시게 할 것이다.
데이터베이스는 HTML 표현이 아닌 실제 데이터를 저장해야합니다.

+0

감사합니다. 하지만 데이터베이스 ""에 PHP 태그를 저장하려고하면 미리 htmlspecialchars()를 사용하지 않으면 그렇게 할 수 없습니다. – khr2003

+1

@ khr2003은 데이터베이스에 php를 저장하지 않습니다. 결코 좋은 생각이 아닙니다. –

+1

나는 동의한다. 그러나 그들은 게시물을 삽입 할 때 bbcode의 일부가 될 것이다. – khr2003

11

htmlspecialcharsEVERY HTML 내에서 콘텐츠를 출력 할 때 콘텐츠가 HTML이 아닌 콘텐츠로 변환됩니다.

콘텐츠를 HTML로 처리하도록 허용하면 최소한 버그에 대한 문호를 열었고 총 XSS 해킹은 최악의 경우입니다.

+0

질문을 오해하고 있습니다. – SLaks

4

사용자가 입력 한 정확한 것을 데이터베이스에 저장하십시오. 다음 public으로 표시 할 때는 htmlspecialchars()을 사용하여 xss 보호 기능을 제공합니다.

+0

하지만 그는 그렇게하기 위해 ** WHY **에게 물어보고 있습니까? 당신은 대답에 이유를 제시하지 않았습니다. 편집 해보십시오. –

0

가이드 - 당신은 1 개 간단한 개념을 이해해야합니다 시작하려면 PHP

에 반드시 htmlspecialchars() 함수를 사용하는 방법 : 렌더링합니다.

렌더링은 무엇입니까? HTML이 안녕하세요처럼 굵게

<b>Hello</b> 

를 변환 할 때 가 렌더링이다. 렌더링됩니다.

그래서 ... 언제 htmlspecialchars() 함수를 사용합니까?

어디서나 HTML 콘텐츠를 렌더링하고 싶습니다. 당신이 jQuery를 사용하고이 작업을 수행 할 경우 예를 들어, :

$("#YourDiv").html("<b>Hello</b>"); 

DIV 내용 안녕하세요될 것입니다. 텍스트를 HTML로 렌더링했습니다.

이 방법으로 메시지 (사용자가 썼다) 표시하려면 :

<b>Hello</b> 

당신은 넣어 가지고 : 헬로 렌더링되지 않습니다 그런 식으로

$("#YourDiv").text("<b>Hello</b>"); 

합니다. 당신은 텍스트 상자, 텍스트 영역 등으로 (사용자가 쓴) 메시지를로드하려면

... 당신은 넣어 가지고

<input type="text" class="Texbox1" value=""> 

<script> 
$(".Textbox1").val("<b>Hello</b>"); 
</script> 

표시됩니다 그

<b>Hello</b> 

내부 문제없이 Textbox.

결론 : 지금까지 데이터 등 양식,에 사용자 입력이 ... 일반적으로 데이터를 저장 무엇

. 기능을 사용하지 마십시오. 사용자가 12345를 그대로 보내면 저장합니다. 아무것도 필터링하지 마십시오. 페이지의 데이터를 사용자에게 표시 할 때만 필터를 적용하면됩니다. 당신이 렌더링을 원하는지 또는 사용자가 쓴 것을 결정할 것인지를 결정합니다. *기억.

감사합니다.