6

htmlspecialchars()XSS攻撃を防ぐ機能を使用しています。以下からデータベースにデータを保存するためのより良い方法は何かについて疑問があります。

方法 1 :関数を適用した後、ユーザー入力値を格納しますhtmlspecialchars()。これを使用すると、ユーザー入力"<script>"は「<script>」になります。.

方法 2 :ユーザー入力をそのままhtmlspecialchars()保存し、データを取得してページに表示しながらメソッドを適用します。

私の疑問の理由は、メソッド 1 を使用するとデータベースにオーバーヘッドが発生するのに対し、メソッド 2 を使用すると、PHP から要求されたときにデータを何度も変換する必要があると考えているからです。なので、どちらが良いかわかりません。

詳細についてhtmlspecialchars($val, ENT_QUOTES, "UTF-8")は、' と " も変換するように使用しています。

私の疑問を解消するのを手伝ってください。できれば解説も。

ありがとう。

4

4 に答える 4

11
  1. なぜ常にHTMLコンテキストでデータを使用することを期待しているのですか?「I<3あなた」と「I&lt;3あなた」は同じデータではありません。したがって、データは意図したとおりにデータベースに保存してください。逃げて保管する理由はありません。
  2. 必要なときにのみデータをエスケープするHTMLにより、自分が何をしているかを確実に知ることができます。これ:

    echo htmlspecialchars($data);
    

    よりもはるかに優れています:

    echo $data; // The data should already come escaped from the database.
                // I hope.
    
于 2012-03-01T08:33:51.957 に答える
6

さらに良い理由は、特定のスペースに合わせて切り捨てると、などの嫌悪感に悩まされること"&quo..."です。必要最小限以上のデータをいじりたいという誘惑に抵抗してください。データの再処理が心配な場合は、データをキャッシュしてください。

于 2012-03-01T08:30:54.833 に答える
4

私の推奨事項は、データを最も純粋な形式でデータベースに格納することです。変換する唯一の理由&lt;script&gt;は、後で HTML ドキュメントで表示する必要があるためです。しかし、データベース自体は、データを取得した後にデータをどう処理するかを知る必要はありません。

于 2012-03-01T08:36:13.660 に答える
0

XSS攻撃だけでなく、ユーザー入力をデータベースに入力する場合、SQLインジェクション攻撃についても心配する必要はありませんか?その場合、とにかくデータベースに入れる前に、ユーザー入力をエスケープする必要があります。

于 2012-03-01T08:32:57.240 に答える