2011-02-03 7 views

答えて

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

しかし、彼は何を求めているのですか?あなたはあなたの答えに理由を提示しませんでした。編集を検討してください。 –

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> 

が表示されます問題のないテキストボックス。

結論:これまで

どのようなデータフォームへのユーザー入力、など...通常は、データを保存します。 機能を使用しないでください。ユーザーが12345をそのまま送信した場合。何もフィルタリングしないでください。ページ内のデータをユーザーに表示するときにフィルタをかけるだけで済みます。あなたは、あなたがレンダリングするかどうか、またはユーザーが書いたものを選択するかどうかだけを決定します。 *それを覚えています。

よろしくお願いいたします。

関連する問題