问题描述
我正在尝试阻止我的评论网络应用程序出现 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 = {
'&': '&','<': '<','>': '>','"': '"',"'": ''',"/": '/',};
const reg = /[&<>"'/]/ig;
return data.replace(reg,(match) => (map[match]));
}
这一切都很好,当我尝试使用 <script>alert("XSS")</script>
提交时,没有任何反应,这很好,它仍然按应有的方式使用括号进行渲染。唯一的问题是,当我刷新时,它呈现为 <script>alert(0)</script>
用它们的 HTML entities
替换所有括号。
我可以理解为什么数据可能不同,因为在渲染时我正在运行一个数组,存储在我所有评论的数据库中并一遍又一遍地放置 comment.content
,但为什么实体不起作用尽管如此?我可以在哪里查看以进行调试?
感谢您的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)