我有一条短信<script>alert('injection');</script>
我想要在 ASP MVC3 应用程序中呈现为 jquery 模板的 View 中呈现它。但是<
显示为<
.
我的 jquery 模板如下:
<script id="nameTemplate" type="text/x-jquery-tmpl">
<p>${Name}</p>
</script>
我们如何将其呈现为纯文本?
最佳答案
正如 SpaceBison 所暗示的,您的浏览器将解码 HTML 编码值并将其写为“纯文本”HTML。
为了将值写出编码,您实际上必须对该值进行“双重编码”,因此当浏览器解码并呈现它时,它仍然会被编码一次。
如果您的值最初来自 ASP.NET MVC 模型属性或类似属性(假设这基于您的标签),则可以在服务器端代码中使用 HttpUtility.HtmlEncode
,例如:
Model.Name = HttpUtility.HtmlEncode(Model.Name);
但是,如果您需要在前端执行此操作,您可以编写一个简单的 jQuery 函数来对值进行编码(无耻地从 this answer 窃取):
function HtmlEncode(str) {
return String(str)
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
然后,在将项目添加到容器之前,您可以在 jQuery 中执行以下操作:
Name = HtmlEncode(Name);
要查看其实际效果:http://jsfiddle.net/Rb2VJ/1/
关于jquery - 在 jquery 模板中将 < 渲染为文本,而不是 < 或 >,因为它不是 >,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15655809/