phpでユーザー入力データを操作します。何がいいですか?

StackOverflow https://stackoverflow.com/questions/1820754

  •  10-07-2019
  •  | 
  •  

質問

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

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

何が良いのか、これらのいずれかに欠点はありますか?

よろしく

役に立ちましたか?

解決

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

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

他のヒント

  

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

これ。通常、人々に小なり記号とアンパサンドを入力させ、ページ上にそのように表示させたいと思うでしょう。すべてのテキストからHTMLへの出力ステップでの htmlspecialchars (テキストがユーザー入力、データベース、または他のどこから直接来たか)は、これを達成する正しい方法です。入力をいじるのは、出力エンコードの問題に対処するための適切な戦術です。

もちろん、 SQL 文字列にテキストを入力するためには、異なるエスケープ—またはパラメーター化-が必要になります。

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

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

上記の最後のポイントは次のポイントに続きます。多くの人は、元の入力を常に維持する必要があると感じています。これは、後でデータを別の方法で使用することに決めた場合、たとえば、新しいコンテキストでHTMLタグが大したことではない場合に、非常に理にかなっています。また、サイトが何らかの形で侵害された場合、正確な入力が記録されます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top