質問

私を悩ませ続ける簡単な質問。

ユーザー入力をすぐにHTMLエンコードして、エンコードされたコンテンツをデータベースに保存する必要がありますか、または表示時に生の値とHTMLエンコードを保存する必要がありますか?

エンコードされたデータを保存すると、開発者がデータが表示されているときにエンコードを忘れるリスクが大幅に減少します。ただし、エンコードされたデータを保存すると、データマイニングが多少面倒になり、通常は問題ではありませんが、少しスペースが必要になります。

役に立ちましたか?

解決

iは、出口に情報をエンコードすることを強くお勧めします。データベースに生データを保存すると、特定の時点での表示方法を変更したい場合に便利です。フローは次のようになります。

sanitize user input -> protect against sql injection -> db -> encode for display

代わりにRSSフィードとして情報を表示したい状況を考えてください。再表示する前にHTML固有のエンコーディングをやり直さなければならないのは、少しばかげているように思えます。開発は常に「入力を信用しない」に従ってください。その入力がユーザーからのものであれデータベースからのものであれ、ミーム。

他のヒント

エンコードは、ディスプレイでのみ行う必要があります。例外なし。

出力。

HTMLでは、文字列の長さを単純に確認することはできません(& amp; は1文字ですが、 strlen()は5を示します)。簡単にトリミングできます(エンティティが破損する可能性があります)。

データベースの文字列と別のソースの文字列を混在させるか、読み書きする必要がある場合があります。エスケープを逃さずにアプリケーション全体でこれを実行し、二重エスケープを回避するのは悪夢です。

PHPは magic_quotes で同様のことを試みましたが、大きな失敗であることが判明しました。 magic_entities のルートをとらないでください! :)

HTMLエンコードされたテキストを理解できないもの(レポートツールなど)を使用してデータベースにアクセスする必要がある場合があることに注意してください。スペースは問題ではないことに同意しますが、私見では、HTMLエンコードをデータベースに配置すると、ビュー/フロントエンドの知識がアプリケーションの最下層に移動します。これは設計ミスです。

これはエンコードの目的に反しませんか?悪意のあるsqlスクリプトが入力として入力され、それがdbに渡されると、大きな問題を引き起こす可能性があります。

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