簡體   English   中英

如何在ASP.NET MVC 3中的Razor視圖中編碼嵌入式javascript?

[英]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 = {&amp;quot;UnselectedReason&amp;quot;:&amp;quot;None Selected&amp;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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM