2

私は、ユーザーが挿入する可能性のある望ましくないタグに関してユーザーが入力したデータを管理するための最良の方法を見つけようとしています。

  • strip_tags() -タグは削除され、データベースには挿入されません
  • タグはデータベースに挿入されますが、そのフィールドを読み取ってユーザーに表示する場合は、htmlspecialchars()を使用します。

何が良いですか、そしてこれらのいずれかに不利な点はありますか?

よろしく

4

3 に答える 3

3

これは、優先順位によって異なります。

  • ユーザー入力から特殊文字を表示することが重要な場合(たとえば、StackOverflowなど)、この情報をデータベースに保存し、ディスプレイ上でサニタイズする必要があります。この場合、少なくとも次のように使用する必要がありますhtmlspecialchars()。出力を表示します(より洗練されたものではない場合)
  • プレーンテキストのコメントが必要な場合strip_tags()は、データベースに貼り付ける前に使用してください。これにより、保存する必要のあるデータの量が減り、画面にデータを表示するときの処理時間が短縮されます。
于 2009-11-30T16:16:05.737 に答える
2

タグはデータベースに挿入されますが、そのフィールドを読み取ってユーザーに表示する場合は、htmlspecialchars()を使用します。

これ。通常、ユーザーが「未満」の記号やアンパサンドを入力して、ページにそのように表示できるようにする必要があります。htmlspecialcharsすべてのテキストからHTMLへの出力ステップ(テキストがユーザー入力から直接、データベースから、または完全に他の場所からのものであるかどうか)は、これを達成するための正しい方法です。入力をいじることは、出力エンコーディングの問題に対処するためのまったく適切な戦術ではありません。

もちろん、SQL文字列にテキストを入れるには、別のエスケープ(またはパラメータ化)が必要になります。

于 2009-11-30T16:25:19.697 に答える
0

ユーザー入力を保護するために講じられる対策は、データがどのコンテキストで使用されているかに完全に依存します。例えば:

  • SQLデータベースに挿入する場合は、パラメーター化されたステートメントを使用する必要があります。PHPmysql_real_escape_string()もきちんと機能します。
  • HTMLページに表示する場合は、HTMLタグを削除またはエスケープする必要があります。
  • 一般に、ユーザー入力を別の形式のマークアップまたは別の言語と混合する場合は常に、そのコンテキストに配置する前に、その言語の要素を入力からエスケープまたは削除する必要があります。

上記の最後のポイントは次のポイントにつながります。多くの人は、元の入力を常に維持する必要があると感じています。これは、後でデータを別の方法で使用することを決定した場合に非常に意味があります。たとえば、新しいコンテキストではHTMLタグは大した問題ではありません。また、サイトが何らかの形で危険にさらされている場合は、与えられた正確な入力の記録があります。

HTMLページに表示することを目的としたユーザー入力のHTMLタグに特に関連します。ユーザーがHTMLタグを入力する理由が考えられる場合は、単にそれらをエスケープします。そうでない場合は、表示する前にそれらを取り除きます。

于 2009-11-30T18:03:59.030 に答える