Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
渲染&;lt作为文本而不是<;或;gt,因为它不是>;在jquery模板中_Jquery_Asp.net Mvc 3_Jquery Templates_Javascript Injection - Fatal编程技术网

渲染&;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, '&amp;')
        .replace(/"/g, '&quot;')
        .replace(/'/g, '&#39;')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;');
}
Name = HtmlEncode(Name);