2012-01-02 10 views
3

スクリプトを使ってimgを動的に挿入するときに問題があります。C#でユーザ入力をサニタイズする - 最もクリーンな方法?

newPlace.find('.PlaceThumb').append('<img src="' + place.ThumbnailUrl + '" alt="' + place.Name + '" width="50px" style = "padding:2px;"/>'); 

誰かが自分の地名ができます:

は場所のため、画像を挿入するために、次のコードを取る「のonload =」警告(「こんにちは」)」とタグがレンダリングされるように:

<img src="/item.aspx?id=123" alt="" onload="alert('hi')" width="50px" style = "padding:2px;"/> 

イメージがロードされると、スクリプトが実行されますが。

のみとタグのonload属性をサポートしていますが、これはユーザの入力を信用したことがないのは良い教訓です。

これは何をやっての「正しい」(、素敵なエレガントな、きれいな、一般的な)方法です:

newPlace.find('.PlaceThumb').append('<img src="' + place.ThumbnailUrl + '" alt="' + place.Name.replace('"', '&quot;') + '" width="50px" style = "padding:2px;"/>'); 

私はあなたがそれらをUUencodeするだろう文字列に演算子を定義することができ、テンプレートと多分考えていた - と類似C#で@のプレフィックスが付いた文字列がバックスラッシュとはどのように特別な意味を持っているかを指定します。この機能を標準の.net文字列クラスに追加する方法はありますか?

+0

btw - さらに研究すると@は、文字列リテラルだけで動作するコンパイラレベルの構文砂糖のようです。 –

+1

コードはC#コードではありません.JavaScriptのようです。 – Oded

+0

これはXSS防止に関するものです。一つのことについて考えてみましょう:javascriptを使ってクライアント側でアルファベット文字にユーザ入力を制限し、サーバ側では英数字以外の文字をすべて入力文字列から削除することで検証します。 – frenchie

答えて

0

jQueryを使用しているかどうかはわかりません。有効でない可能性があり

newPlace.find('.PlaceThumb').append('<img>'); 
$('.PlaceThumb img').attr('src', place.ThumbnailUrl).attr('alt', place.Name); 

が、それはちょうど私の頭の上からですが、あなたに見て何かを与える必要があります:あなたがいる場合は、このような何かを行うことができます。

+0

質問は "C#"と "asp.net"とタグ付けされています – RickNZ

+1

@RickNZ - はい、それは明らかにJavascriptです。一重引用符で伝えることはできますが、C#では文字列を作成しません。 –

+0

はい、JavaScriptはC#から生成されています(少なくとも私の解釈ですが、質問は少しあいまいですが、私は認めます)。 – RickNZ

0

AntiXSS libraryが考えられます。あなたのコードがデータとレンダリングされたHTMLの間に多数のレイヤーを持つように見えるので、エンコードに非常に注意してください(ASP.Net - レンダリングされたJavaScriptの一部としてHTMLテンプレートをレンダリング - >ブラウザがJavaScriptをロード - >何かがJQueryテンプレートに基づいてHTMLを作成する)。

注:HTMLレイアウトからCSS(幅とスタイルの属性)を分離することを、HTMLの習慣として考えてください。

0

おそらく、新しいUri(yourUrlString)を使用できます。私は、IsWellFormedUriStringメソッドとIsWellFormedOriginalStringメソッドを使用してalogを使用すると、入力の検証に役立つと思います。

関連する問題