[英]How to fetch value from resource file inside JavaScript in ASP.net MVC view using Razor
[英]How to encode embedded javascript in Razor view in ASP.NET MVC 3?
如何在以下上下文中正確編碼JavaScript:
<html>
...
<script type="text/javascript">
var settings = @Html.PleaseEncode(settings.ToJson());
// ...
</script>
</html>
我的JSON對象中的值由應用程序管理員設置,因此我假設它們需要正確編碼 - 包括HTML和JavaScript。
我正在使用System.Web.Script.Serialization.JavaScriptSerializer來執行JSON編碼。 它看起來像JavaScriptSerializer做了一些編碼,因為它輸出文本
<None>
為\
現在,我正在使用
@Html.Raw
作為安全輸入。 它生成以下內容:
var settings = {"UnselectedReason":"None Selected", /*...*/};
如果我使用
@Html.Encode
,那么我得到:
var settings = {&quot;UnselectedReason&quot;:&quot;None Selected&quot;, /*...*/};
我曾嘗試使用和不使用AntiXSS,但我認為沒有任何區別。
AntiXSS具有JavaScriptEncode,但它是針對單個項目而設計的,而不是采用一整套錯誤的設置。
因此,如果你傳入{“UnselectedReason”:“沒有選擇”,/ ... /}它會吃掉引號和其他東西,這可能不是你想要的。 相反,我要做的是在你的ToJson我用字符串構建器構建設置,類似於
StringBuilder sb = new StringBuilder();
sb.Append("{");
foreach(KeyValuePair kv in mySettings)
{
sb.Append("\"");
sb.Append(Microsoft.Security.Application.Encoder.JavaScriptEncode(kv.Key, true);
sb.Append(":");
sb.Append(Microsoft.Security.Application.Encoder.JavaScriptEncode(kv.Value, true);
sb.Append("\",");
}
string outputString = sb.ToString().TrimEnd(",") + "}";
return new HtmlString(outputString);
注意:代碼不在我的腦海中,甚至沒有輸入VS. 它說明了主體,可能無法編譯!
如果你想使用JS,你為什么要編碼呢? 如果你有json,它應該已經被編碼了。 從它的JS開始,你也不應該要求html編碼。
我不相信你需要在這里編碼,除非你能提供一個案例,我只是錯過了什么?
使用任何有效的javascript你都可能冒着注入的風險,但是因為你知道這是來自一些有效的源(即模型),它被編碼,獲得JSON的路徑相對安全。
直接輸出應該是安全的......
<script>//<![CDATA[<!--
var settings = @Html.Raw(settings.ToJson());
//-->]]></script
雖然如果你真的擔心...這假定包含現代瀏覽器或json2.js。
<script>
var settings = JSON.parse("@Html.Raw(Server.UrlEncode(settings.ToJson()))");
</script
這將是安全的。 它不會破壞你的標記。
如果您確定要做什么:
@Html.Raw(yourStringWithTheJSONcode)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.