2009-06-07 4 views
0

にHTMLエンコードを追加:はこのように... Webページへのユーザー入力を追加する場合、(それが当然のHTMLでない限りは:) XSS攻撃などを防ぐためにエンコードする必要があり、ビジネス層

litForename.Text = HttpUtility.HtmlEncode(MyUser.Forename); 

私は私のビジネスロジック層を生成するためのテンプレートをまとめています。データがデータベースから出てすぐに、それがUIコードに到達する前にすべてのエンコーディングを行うことを考えています。これにより、すべてがエンコードされていることが保証されます(Xhtml/Xml文字列を含む列は除外されます)。データ・アクセス・メソッドのオーバーロードは、(それを編集することができます)、エンコーディングを持たないデータの検索が可能になります:

// Get a 'User' entity with all the string fields HTML encoded 
BLL.Users.GetById(int userId) 

// Get a 'User' entity with optional HTML encoding 
BLL.Users.GetById(int userId, bool useHtmlEncoding) 

が、これは誰が使用する、またはそれがダム考えであることをアプローチですか?長所と短所は何ですか?

ありがとうございました。

答えて

3

これは理にかなっている場合がありますが、一般的にはこれに対して助言します。ビジネスロジックレイヤーはビジネスロジックとビジネスロジックのみを処理する必要があります。

同様に、ASP.NET MVCを想定しているコントローラは、特定のタイプのUIを予期して変更された値ではなく、ビジネスドメインのコンテキストで意味のある値を扱う必要があります。

あなたのUIレイヤーは、それがどのタイプのUIであるかを知っている必要がある唯一のレイヤーです。現時点では、あなたの唯一のタイプのUIはHTMLベースになると思われるかもしれませんが、それは変わる可能性があります。

+0

私は同意します - 健全性チェックのおかげで。 – Nick

1

HtmlEncodeをデータベースに保存する際の問題は、データに&"などのデータを処理する必要があることです。たとえば、 "Tom O'Brien"は "Tom O " Brien"という名前でデータベースに保存されます。その上でSELECTやUPDATEを行うのは難しいでしょう。

UIにテキストを表示するのにHtmlEncodeを使用するだけでよいと思います。

+0

私は途中でデータをエンコードすることを考えていました - データベースに入るすべてがそのまま保存されます。 – Nick

0

私はビューレベルのデータ変換がビュー世代に属する他のポスターに同意します。あなたはXMLベースのビュー(例えば、XHTML、音声ブラウジングのVoiceXML、WebサービスのXML)だけで始めることができますが、AJAXインタラクションをサポートするためにJSONビューも必要とするとどうなりますか? JSON Javascriptのリテラルは、XMLとは異なるエスケープ・メカニズムを使用します。

また、ロジック層のメソッドの1つで、ビュー生成とは無関係の目的で別のロジック層メソッドを呼び出す必要があるケースもあります。おそらく、呼び出し元のメソッドは、別のデータベーステーブルを作成するバルクデータ変換を適用する必要があります。その場合、呼び出しメソッドはXMLエスケープを元に戻す必要があります。

1

ビジネスロジックはプレゼンテーションについて本当に知ってはいけません。ウェブ、ウィンドウ、または他のタイプのUIを提供している場合でも、ビジネスロジックにこれらの詳細を含めるべきではありません。

あなたのビジネス層を使用しているユーザーが、エンコードの上でデータを再度エンコードしようとしていると思われましたか?それは事もあまりにも面倒に見える原因になる可能性があります。

0

PHPのmagic_quotes_gpc機能のレッスンを学んでください:このようなエンコーディングは、事をもっと混乱させるだけではなく、あなたがエスケープするのを忘れ、データベース、Web、または他の場所に移動する必要がある場所にデータが送信されるまで、データをエンコードしないでください。

関連する問題