0

私が(PHPを使用して)Web開発者だった古き良き時代には、処理を開始する前に、送信されたすべてのフォームデータを正規表現で実行していました。ほとんどの場合、SQLインジェクションとクロスサイトスクリプティングに対する防御を提供しながら、99%の人を99%満足させる小さな句読文字のセットとともに英数字を許可します(はい、PDOプリペアドステートメントも使用しました)。

最近では、国際化されたコンテキストで入力を処理する必要がありました。具体的には、入力がアラビア語だけでなく、かなりの数の異なる西ヨーロッパおよび東ヨーロッパの言語で行われる可能性があります。このような場合、私は潜在的に危険な文字を削除し、他のすべてのものを入れることにしました。アプリケーションのユーザー数は非常に少なく(10人未満)、内部ネットワークにのみ展開されていたため、システムですが、公的にアクセス可能なWebサイトでこのアプローチを採用するのは快適ではありません。

要約すると、入力をフィルタリングして、残っているものが「プレーンテキスト」になるようにしたいのですが、国際化されたコンテキストでプレーンテキストの概念を定義する方法がわかりません。これに対処するPHPライブラリはありますか?

4

2 に答える 2

1

すべてが「プレーンテキスト」です。「'DROPTABLEusers-」もプレーンテキストです。「<script>」もプレーンテキストです。

あなたが心配しているのは「特殊文字」、つまり特定の文脈で特別な意味を持つプレーンテキストです。そのためには、これらの特殊文字をエスケープして、指定されたコンテキストでそれらを「混乱させる」必要があります。HTMLの場合、それらをHTMLエンティティにエスケープします。SQLの場合、SQL-文字列をエスケープします(または、一般にこの問題を回避するためにプリペアドステートメントを使用します)。CSV、CSVの場合-値をエスケープします...あなたはアイデアを得ることができます。これを行う関数やライブラリは常に利用可能です。ここで車輪の再発明を試みないでください。

サニタイズする、つまりコンテンツを削除する場合は、削除するものをより適切に定義する必要があります。コンテンツを削除すると、ユーザーが使用する可能性のある正当なコンテンツを削除するリスクも常に発生します。したがって、これは通常、厄介なオプションです。

このトピックの詳細については、「現実逃避」(または「テキスト内のテキストを操作するために知っておくべきこと)」を参照してください。

于 2012-10-25T10:27:58.320 に答える
0

strip_tags()を試してみてください。http://php.net/manual/en/function.strip-tags.php。それはほとんどの英語の場合に私のために働きました、そして異なる言語のために働くかもしれません。

于 2012-10-27T19:42:18.407 に答える