XSSのようなものから自分自身を保護しようとしているPHPアプリケーションの場合、どの段階でhtmlentities()
関数を呼び出す必要がありますか?最初のユーザー入力で呼び出す必要がありますか、それともそのデータが出力されるすべてのページレンダリングで呼び出す必要がありますか?
ユーザー入力で使用するhtmlentities()
と、データベースに保存するデータが少し多くなります。ただし、長期的には、入力時に変換を実行するだけでよく、その後のそのデータの出力では変換を実行する必要がないため、CPUサイクルを節約できます。
アプリケーションにHTML入力データを保存しなければならないという予測可能なケースは見当たらないので、使用htmlentities()
は純粋にXSS保護のためであることに注意してください。万が一、生のHTMLが必要になった場合は、html_entity_decode()
reverseを呼び出すだけhtmlentities()
です。さらに、ページレンダリングを呼び出すのを忘れたりhtmlentities()
、誤ってXSSエクスプロイトをアプリケーションに挿入したりする必要がなくなります。
私はFacebookのXHP拡張機能を使用するというアイデアをいじくりまわしましたが、XML解析は、アプリケーションで快適なものよりもかなり多くのオーバーヘッドを引き起こします。
概要:htmlentities()
入力または出力で使用する必要がありますか?この状況に対する一般的に受け入れられているアプローチは何ですか?