私が見たすべてから、(XSS を防ぐ目的で) ユーザーが入力したコンテンツで html をエスケープするための規則は、コンテンツをレンダリングするときにそれを行うことのようです。ほとんどのテンプレート言語はデフォルトでそれを行うようです。このロジックはプレゼンテーション層の仕事であると主張するこのスタックオーバーフローの回答のようなものに出くわしました。
だから私の質問は、なぜこれが当てはまるのですか?次の理由により、データベース内のすべてのものをページに安全に表示できるという前提の下で作業できるように、入力 (つまり、フォームまたはモデルの検証) でエスケープする方がクリーンに思えます。
さまざまな出力形式 - 最新の Web アプリの場合、サーバー側の html レンダリング、AJAX/JSON を使用する JavaScript Web アプリ、および JSON を受信するモバイル アプリを組み合わせて使用している場合があります (一部の Web ビューがある場合とない場合があります)。これは、JavaScript アプリまたはサーバーでレンダリングされた html の場合があります)。そのため、いたるところで html エスケープに対処する必要があります。ただし、入力は常にモデルとしてインスタンス化 (および検証) されてから db に保存され、モデルはすべて同じ基本クラスから継承できます。
コードインジェクション攻撃を防ぐために、入力にはすでに注意する必要があります (これは通常、ORM または db カーソルに抽象化されますが、それでもなお)、ここで html エスケープについても心配しないでください。何も心配する必要はありません。出力のセキュリティ関連?
ページ レンダリングでの html エスケープが好まれる理由についての議論を聞きたいです。