【发布时间】:2018-06-15 17:38:06
【问题描述】:
我在 firebase 中存储了一些数据(可以在客户端中检索),然后,我使用 JQuery 将其添加到 HTML 中。这很简单——我只是将数据添加到 DOM 元素中。然而,问题是,这个原始代码很容易受到攻击,所以我需要在将其添加到 HTML 之前正确地转义从数据库中获取的数据。我认为下面的代码可以完成这项工作:
function escapeHTML(text) {
var map = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
return text.replace(/[&<>"']/g, function(m) { return map[m]; });
}
$('#element').prepend('<h1>Heading</h1><p>' + escapeHTML(data) + '</p>');
当我测试这段代码时,通过使数据的值类似于<script>alert('This should not work');</script>,我认为它只会将此文本添加到<p></p>标签中,而不执行JS,但它实际上运行了代码。
我知道使用 $('#element').text() 会为我转义文本,但我不希望所有内容都被转义 - 我仍然想添加 <h1></h1> 和 <p></p> 标签,我只需要变量“数据“要逃脱。我看到了一些关于类似主题的 StackOverflow 帖子,但似乎都没有解决这个问题 - post 1、post 2、post 3。
【问题讨论】:
-
XSS 不仅仅是
-
@epascarello 你是什么意思?这不是运行插入的 JS 代码的唯一方法吗?
-
不,还有更多方法可以做到。
-
@epascarello 好。你能给我一个例子或一些链接吗?
标签: javascript jquery html html-escape-characters