我正在为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编码的。
答案 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”替换换行符。