HTML 实体在页面刷新时未呈现正确的字符

问题描述

我正在尝试阻止我的评论网络应用程序出现 XXS。现在我正在使用 AJAX 将请求从我的页面表单发送到我的服务器,在那里它将被保存到 mongodb 以供以后使用。然后它会被渲染到 DOM 中,所以显然我希望能够清理所述数据。

这是我的表单的代码

<form class="comment-make-form" method="POST" action="/server">
    <p>New Comment:</p>
    <input type="text" name="content" id="content">
    <input type="submit" value="Comment">
</form>

这是 jQuery/AJAX 方面:

$(".comment-make-form").on("submit",function(e) {
    e.preventDefault()
    const queryUrl = $(this)[0].action.split("/")

    let data = {};
    data.content = sanatizeData($("#content").val());

    $.ajax({
        type: "POST",url: `/account/${queryUrl[4]}/posts/${queryUrl[6]}`,data: JSON.stringify(data),contentType: "application/json; charset=utf-8"
    });

    $('.comment-section').prepend(`<p>${data.content}</p>`)
});

最后是 sanatizeData 函数

function sanatizeData(data) {
    const map = {
        '&': '&amp;','<': '&lt;','>': '&gt;','"': '&quot;',"'": '&#x27;',"/": '&#x2F;',};
    const reg = /[&<>"'/]/ig;
    return data.replace(reg,(match) => (map[match]));
}

这一切都很好,当我尝试使用 <script>alert("XSS")</script> 提交时,没有任何反应,这很好,它仍然按应有的方式使用括号进行渲染。唯一的问题是,当我刷新时,它呈现为 &lt;script&gt;alert(0)&lt;&#x2F;script&gt; 用它们的 HTML entities 替换所有括号。

我可以理解为什么数据可能不同,因为在渲染时我正在运行一个数组,存储在我所有评论数据库中并一遍又一遍地放置 comment.content,但为什么实体不起作用尽管如此?我可以在哪里查看以进行调试?

感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)