使用jQuery / JavaScript检测字符串是否包含javascript标记

时间:2013-03-29 21:13:50

标签: javascript jquery regex pattern-matching

我正在尝试为我正在开发的系统创建一个非常简单的XSS检测系统。现在的系统允许用户使用嵌入在消息中的javascript来提交帖子。这是我目前所拥有的: -

var checkFor = "<script>";
alert(checkFor.indexOf("<script>") !== -1);

这根本不起作用。我需要编写包含我正在搜索[e.g - "<script>","</script>","alert("]

的术语的数组的代码

有关如何使用JavaScript / jQuery实现此目的的任何建议。

感谢您查看此信息。非常感谢:))

3 个答案:

答案 0 :(得分:2)

替换字符是一种非常脆弱的避免XSS的方法。 (有几种方法可以在不输入字符的情况下获取< - 比如&#60;而是对数据进行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;人物角色 &lt;&gt;&amp;

OWASP有一个javascript库。我还没有使用它,所以无法告诉你有关质量的任何信息。这是链接:https://www.owasp.org/index.php/ESAPI_JavaScript_Readme