如何将ASP.net变量的值放入javascript文本框中

时间:2010-11-29 21:50:53

标签: javascript asp.net

我正在为ASP.net页面编写一些Javascript代码。

我将字符串“foo”分配给字符串变量myString

我想将myString的值赋给JavaScript变量,所以我在我的ASP.net代码中写道:

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

只要myString不包含引号或换行符,这样就可以正常工作,但是当我尝试分配带引号或换行符的东西时,所有地狱都会松动,我的代码也没有不行。事实上,我可以看到这段代码容易受到各种注入攻击。

那么......我能做些什么才能将myString的值分配给JavaScript中的变量?

更新:我尝试使用ASP:Hidden字段创建一个页面。看起来里面的值是html编码的。

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

我认为这可能是正在寻找的答案:http://www.velocityreviews.com/forums/t70655-escape-function-in-asp-net.html#edit352659。基本上,对服务器端的值进行编码并使用JavaScript取消编码:

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

这将确保引号和其他危险字符不会破坏您的脚本,或打开攻击媒介。

答案 2 :(得分:0)

您可以使用双引号分配js变量,如此

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

或者你可以转义单引号并用服务器端字符串中的文字“\ r \ n”替换换行符。

相关问题