渲染&;lt作为文本而不是<;或;gt,因为它不是>;在jquery模板中
我有一个文本渲染&;lt作为文本而不是<;或;gt,因为它不是>;在jquery模板中,jquery,asp.net-mvc-3,jquery-templates,javascript-injection,Jquery,Asp.net Mvc 3,Jquery Templates,Javascript Injection,我有一个文本scriptalert('injection')/脚本,我希望在ASP MVC3应用程序中作为jquery模板呈现的视图中呈现该脚本。但是被显示为以获得&按字面意思,使用&;lt $(elem).text(“”)也将显示为纯文本 $(elem.html(“&;lt;”)用于HTML 正如SpaceBison所暗示的,您的浏览器将解码HTML编码的值,并将它们写成“纯文本”HTML 为了将值写入编码的,您必须有效地对值进行“双重编码”,因此当浏览器解码并呈现该值时,它
scriptalert('injection')/脚本
,我希望在ASP MVC3应用程序中作为jquery模板呈现的视图中呈现该脚本。但是
被显示为以获得&代码>按字面意思,使用&;lt代码>
$(elem).text(“”)代码>也将显示为纯文本
$(elem.html(“&;lt;”)代码>用于HTML
正如SpaceBison所暗示的,您的浏览器将解码HTML编码的值,并将它们写成“纯文本”HTML
为了将值写入编码的,您必须有效地对值进行“双重编码”,因此当浏览器解码并呈现该值时,它仍将被编码一次
如果您的值最初来自ASP.NET MVC模型属性或类似属性(假设基于标记),则可以在服务器端代码中使用HttpUtility.HtmlEncode
,例如:
Model.Name = HttpUtility.HtmlEncode(Model.Name);
但是,如果您需要在前端执行此操作,您可以编写一个简单的jQuery函数来对值进行编码(不知羞耻地从中窃取):
要查看它的运行情况:您可以进行搜索并将&
替换为&代码>如果答案解决了您的问题,请务必接受:)我的问题是${Name}的值是scriptalert('injection')/剧本我想按原样展示。但是,当它被渲染为。。。
Model.Name = HttpUtility.HtmlEncode(Model.Name);
function HtmlEncode(str) {
return String(str)
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
Name = HtmlEncode(Name);