我正在尝试为我正在开发的系统创建一个非常简单的XSS检测系统。现在的系统允许用户使用嵌入在消息中的javascript来提交帖子。这是我目前所拥有的: -
var checkFor = "<script>";
alert(checkFor.indexOf("<script>") !== -1);
这根本不起作用。我需要编写包含我正在搜索[e.g - "<script>","</script>","alert("]
有关如何使用JavaScript / jQuery实现此目的的任何建议。
感谢您查看此信息。非常感谢:))
答案 0 :(得分:2)
替换字符是一种非常脆弱的避免XSS的方法。 (有几种方法可以在不输入字符的情况下获取<
- 比如<
而是对数据进行HTML编码。我使用这些函数:
var encode = function (data) {
var result = data;
if (data) {
result = $("<div />").html(data).text();
}
};
var decode = function (data) {
var result = data;
if (data) {
result = $("<div />").text(data).html();
}
};
答案 1 :(得分:0)
正如Explosion Pills所说,如果你正在寻找跨站点漏洞利用,你可能最好找到一个已经写过的漏洞或者可以为你写一个漏洞的人。
无论如何,要回答这个问题,正则表达式不适合解析标记。如果您有一个HTML解析器(客户端很容易,服务器稍微困难),您可以将文本作为新元素的innerHTML插入,然后查看是否有任何子元素:
function mightBeMarkup(s) {
var d = document.createElement('div');
d.innerHTML = s;
return !!(d.getElementsByTagName('*').length);
}
当然,文本中仍然可能存在标记,只是它无效,因此不会创建元素。但结合其他一些文本,它可能是有效的标记。
答案 2 :(得分:-1)
防止xss攻击的最有效方法是替换所有&lt;,&gt;和&amp;人物角色
<
,>
和&
。
OWASP有一个javascript库。我还没有使用它,所以无法告诉你有关质量的任何信息。这是链接:https://www.owasp.org/index.php/ESAPI_JavaScript_Readme