无法呈现原始HTML

时间:2019-03-06 18:21:52

标签: node.js express ejs

我正在尝试将原始html作为ajax响应返回,这是返回响应的函数:

python 3.5

局部视图res.render('partial/messages', { successMsg: 'An email has been sent to you.' + '<a href="' + req.headers.host + '/user/resendToken?email=' + user.email + '">Send Again.</a>', layout: false }, function (err, list) { res.set('Content-Type', 'text/html'); res.status(200).send({ msg: list }); }); 包含以下内容:

message

ajax响应是:

<% if(successMsg != ''){ %>
<div class="alert alert-success alert-dismissible fade show" role="alert">
    <%= successMsg %>
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
    </button>
</div>
<% } %>

为什么渲染" <div class="alert alert-success alert-dismissible fade show" role="alert"> An email has been sent to you.`&lt;a href=&#34;127.0.0.1:3000/user/resendToken?email=foo@outlook.it&#34;&gt;Send Again.&lt;/a&gt;` <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">&times;</span> </button> </div> " 标签<a href

如何解决该问题?

2 个答案:

答案 0 :(得分:1)

&alt;是与<相对应的HTML实体。这是用来防止代码注入。

当您使用<%= something %>语法包含字符串时,EJS正在进行转换。

为防止这种情况,请使用<%- something %>语法。

请记住,不转义这些字符可能会使您的服务遭受XSS攻击。

答案 1 :(得分:1)

因为<%= ... %>转义了HTML。如果您确定可以信任user.email和其他用户生成的数据,则可以改用<%- successMsg %>,它不会转义HTML。

您可以在Docs section of EJS here中阅读有关标签的更多信息。