我在json中安全編碼類似html的文本時遇到了困難。文本應寫入<textarea>
,由ajax傳輸到服務器(.net45 mvc)並以json字符串形式存儲在數據庫中。遍歷和HtmlEncode Json.net中的字符串C#
當傳輸到服務器時,我得到着名的「有潛在危險的Request.Form值被檢測到」500服務器錯誤。爲了避免這個消息,我使用傳遞的模型上的[AllowHtml]屬性。通過這樣做,我打開了XSS漏洞,如果有人粘貼{ "key1": "<script>alert(\"danger!\")</script>" }
。因此,我想用類似
tableData.Json = AntiXssEncoder.HtmlEncode(json, true);
問題是我不能做到這一點就滿JSON字符串,因爲它會呈現類似
{ "key1": ...}
這當然不是我想要的。它應該更像
{ "key1": "<script>alert("danger!")</script>" }
有了這個結果,用戶可以寫任何他們想要的代碼,但我能避免它被呈現爲HTML,只是顯示爲普通的文本。有誰知道如何遍歷JSON與C#(Newtonsoft Json.NET),使字符串可以編碼AntiXssEncoder.HtmlEncode(... , ....);
?或者我在這裏錯了嗎?
編輯:
- 的數據是不均勻的,所以解串行成均勻的對象是不是一個選項。
- 數據可能會向公衆開放,因此存儲編碼的數據會減輕我的靈魂。
看看[在反序列化過程中有選擇地轉義字符串中的HTML](http://stackoverflow.com/q/32562381/10263);這聽起來和你的情況很相似。您可能可以根據需要調整解決方案。 –