2010-11-29 15 views
1

ASP.netページ用のJavaScriptコードをいくつか書いています。JavaScript.netのテキストボックスにASP.net変数の値を取得する方法

文字列変数「myString」に「foo」という文字列が割り当てられています。

私はJavaScriptの変数にmyStringの値を代入したいと思いますので、私は私のASP.netのコードで書く:これは、引用符が含まれていない限りmyStringとして正常に動作します

<script type='txt/javascript' language='javascript'> 
    var stringFromDotNet = '<%=myString%>'; 
</script> 

またはライン - 引用符や改行で何かを割り当てようとすると、すべての地獄が壊れてしまい、コードが機能しなくなります。実際、このコードはすべての種類の注入攻撃に対して脆弱であることがわかります。

だから私はmyStringの値をJavaScriptの変数に代入すればいいのですか?

更新:私は、ASP:隠しフィールドだけでページを作成しようとしました。内部の値がhtmlエンコードされているようです。

答えて

5

<script type="text/javascript"> 
    var stringFromDotNet = <%= new JavaScriptSerializer().Serialize(myString) %>; 
</script> 

このアプローチも、あなたは、複雑なオブジェクトを渡すことができなく単なる文字列:

<script type="text/javascript"> 
    var complexObjectFromDotNet = <%= new JavaScriptSerializer().Serialize(new { id = 123, name = "foo\"' <bar>" }) %>; 
    alert(complexObjectFromDotNet.name); 
</script> 
+0

ありがとうございます。これは私のために働いた。 –

0

私はこれが答えを探しているかもしれないと思う:http://www.velocityreviews.com/forums/t70655-escape-function-in-asp-net.html#edit352659。基本的には、サーバー側で値をエンコードおよびJavaScriptでそれをunencode:

var stringFromDotNet = decodeURI(<%=Server.URLEncode(myString)%>); 

これは、引用符やその他の危険な文字は、スクリプトを壊さないことを確認、または攻撃ベクトルを開きます。

0

はあなたがそう

var stringFromDotNet = "<%=myString%>"; 

のように二重引用符を使用してjsの変数を割り当てることができますいずれか、またはあなたは、単一引用符をエスケープし、リテラルで改行を置き換えることができます「\ rを\ n」は、サーバ側での文字列インチ

あなたが JavaScriptSerializerを使用することができますし、それはXSSに対して安全であることが保証されます
+1

動作しません。なぜなら私のユーザーは二重引用符を使うことができず、私はまだまだ攻撃的です。 –

+0

引用符をエスケープする必要があります。二重引用符を使用してjs変数を割り当てる場合は、文字列の二重引用符をエスケープする必要があります。ユーザーは影響を受けていません。値をmyStringに代入するときに文字列をエスケープする必要があります。 –

関連する問題