2011-07-13 7 views
0

MVCフレームワークバージョン2.0とEntityフレームワークの両方を使用してASP.NETを使用してイントラネットのWebサイトを構築しました。XSSはASP.NET MVC2とHTMLのテキストボックスに問題がありますか?

私が興味を持っているデータのビットの1つはNotesです。これは、タイプテキストとしてデータベースに格納されます。 Entityフレームワークを使用して保存され、ロードされます。これはテキストボックスの入力でウェブ上にのみ表示されます。データはサーバー上でまったく使用されません。

したがって、サーバーの検証を無効にすると、これがXSSハザードになるかどうかが問題です。 Notesをテキスト入力に入れる前に、Notesのエンコードについて心配する必要があります。

コメント1

私は.NET 3.5を使用しています。 )Visual Studio 2008から抜け出すと、これが将来更新されることを祈っています;

以下は、どのようにノートをウェブページに置いているかです。

<%= Html.TextArea("Notes", null, new { rows = "10", style = "width:100%" }) %> 

ノーツがウェブページに表示される唯一の方法です。サーバーでは、私は(私はどこの文取り残さ)のようなものをやっている:

var myStruct = (from u in myDB.dbSomeStruct 
       select u).FirstOrDefault(); 
myStruct.Notes = Notes; 
myDB.SaveChanges(); 

答えて

1

XSSは本当にダウンし、ページ上にサーバから送信するもの、すなわち出力をエンコードすることになります。

ユーザーは、他の種類の注入攻撃(SQLインジェクションなど)を脇に置いて、悪意を持って作成された入力を送信することができます。今は、他のものを(Web以外の別のメディアに置くなど)したい場合があるので、エンコードされた形式でその入力を保存することはお勧めしません。しかし、Webリクエストに対する応答としてその入力を返信する場合は、にエンコードしてください。応答で入力を見ることができる唯一のユーザーは、最初の入力を入力した元のユーザーである可能性があります。エンコーディングが不要であると考えるかもしれません。とにかく、アプリケーションの機能がいつ変化し、他のユーザーがその入力を見ることができ、突然あなたが潜在的なXSSエクスプロイトを持っているかわからないので、これを標準的なアプローチとしてエンコードすることをお勧めします。

上記はシステムからの入力を扱っています。他のシステムからの入力にも同じことが言えます。 は常にをエンコードします。自分で明示的に作成したもの以外の他のソースからのデータは信頼できません。私はこの観点から、XSSを緩和する良いスタートだと思っています。

.NET 4でMVC 2を使用している場合、<%: Data %>を使用すると、default encoderを使用してDataのHTMLエンコードが行われます。 .NET 4を使用していない場合は、<%= Html.Encode(Data) %>を使用する必要があります。

+0

出力をテキストボックスに入れる場合は、データをエンコードする必要がありますか?または、テキストボックスに詰め込まれているときにはすべてエンコードできますか? –

関連する問題