我正在尝试将原始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">×</span>
</button>
</div>
<% } %>
为什么渲染"
<div class="alert alert-success alert-dismissible fade show" role="alert">
An email has been sent to you.`<a href="127.0.0.1:3000/user/resendToken?email=foo@outlook.it">Send Again.</a>`
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
"
标签<a href
?
如何解决该问题?
答案 0 :(得分:1)
&alt;
是与<
相对应的HTML实体。这是用来防止代码注入。
当您使用<%= something %>
语法包含字符串时,EJS正在进行转换。
为防止这种情况,请使用<%- something %>
语法。
请记住,不转义这些字符可能会使您的服务遭受XSS攻击。
答案 1 :(得分:1)
因为<%= ... %>
转义了HTML。如果您确定可以信任user.email
和其他用户生成的数据,则可以改用<%- successMsg %>
,它不会转义HTML。
您可以在Docs section of EJS here中阅读有关标签的更多信息。