2011-01-13 26 views
0

私はこれに非常によく似たコードを使用して物語を求めているのtextareaボックス内の任意<script>タグを入力することからユーザーを防ぎたい:ASP.NET MVCの検証

if (ArticleToCreate.story.Contains("<script>") == true) 
       ModelState.AddModelError("Story", "No script tags allowed!"); 

残念ながら、これは動作しません。それはまたは何らかのコードを探しているのではなく、正確に<script>を探しているからです。 '

誰でも手伝いできますか? 上に示したような非常に似たコードを使用したいと思います。サービスレイヤーやモデルスクリプトは使用しません。ありがとう

+3

一般的に言えば、XSS攻撃には自分のロールしたソリューションを使用することはほとんどありません。簡単な解決策は、すべてのユーザー入力をHTMLでエンコードすることです(これはやり方で、Razorが自動的に行います)。 –

+0

私は、これらのタグをチェックし、可能であれば検証エラーを投げようとするセキュアなソリューションを探しているわけではありません。 – Cameron

答えて

0

あなたが探しているものを得るためにhtmlエンコーディングを使用することができます。

<%:あなたを助けるでしょう> < --------- model.story%、あなたはこのようなものを使用することができない場合のasp.net MVC 2を使用していると仮定イム:

<%= Html.Encode(Model.story)%> < -----これはasp.net mvcのためですが、それはサーバー側の検証用で、独自のクライアント側の検証を追加できます。

3

デフォルトでは、MVCはこれを許可しません。明示的に許可する場合は([ValidateInput(false)]など)、入力をサニタイズするにはMicrosoft Web Protection Libraryのようなツールを使用する必要があります。

1

ユーザーがHTMLを入力できるようにする必要がある場合は、Microsoft Web Protection Libraryを調べることをお勧めします。これには、ユーザーが入力したHTMLフラグメントを安全にする方法が含まれています。

私は、不正なタグを認識するための独自のソリューションを作成しようとすると悪い考えであると言ってMatt Greerに同意します。 HTMLにスクリプトを挿入するための攻撃ベクトルは非常に多くあり、それらのスクリプトをすべて保護することはできません。 (サンプリングについてはXSS Cheat Sheetを参照してください。しかし、これ以上のものもあります)