2010-11-29 56 views
1

我正在爲ASP.net頁面編寫一些Javascript代碼。如何獲取一個ASP.net變量的值爲一個JavaScript文本框

我把字符串「foo」賦給字符串變量myString

我想的myString值分配給一個JavaScript變量,所以我在ASP.net代碼寫:

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

這工作得很好,只要myString不包含引號或線 - 但是,儘快我嘗試使用引號或換行符來指定某些內容時,所有地獄崩潰,我的代碼不起作用。事實上,我可以看到這個代碼很容易受到各種注入攻擊。

所以...我能做些什麼得到值myString分配給一個JavaScript的變量?

更新:我試着用ASP創建一個頁面:隱藏字段。它看起來像裏面的值是HTML編碼。

回答

5

你可以使用JavaScriptSerializer而這保證安全不受XSS:

<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

您既可以使用雙引號,像這樣

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

分配JS變量或者你可以逃脫單引號和替換符合文字分隔符「\ r \ n」在你的服務器端的字符串。

+1

這不工作因爲那時我的用戶不能使用雙引號,而且我仍然很容易被攻擊。 – 2010-11-29 22:00:17

+0

您必須避開引號。如果您使用雙引號分配js變量,則必須避免字符串中的雙引號。您的用戶不受影響。在將值賦給myString時,您必須轉義字符串。 – 2010-11-29 22:02:25

相關問題