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

Detect if string contains javascript tags using jQuery/JavaScript

本文关键字:javascript 是否 包含 标签 字符串 检测 jQuery 使用      更新时间:2023-09-26

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

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

这并不能很好地工作。我需要编写的代码包含一个数组,其中包含我正在搜索的条款[e.g - "<script>","</script>","alert("]

关于如何使用JavaScript/jQuery实现这一点,有什么建议吗?

谢谢你的检查。非常感谢:)

替换字符是一种非常脆弱的避免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();
    }
};

正如Explosion pill所说,如果你正在寻找跨站点漏洞,你可能最好找到一个已经写过的或可以为你写一个的人。

无论如何,要回答这个问题,正则表达式不适合解析标记。如果您有一个HTML解析器(客户端很容易,服务器端有点困难),您可以将文本作为新元素的innerHTML插入,然后查看是否有任何子元素:

function mightBeMarkup(s) {
  var d = document.createElement('div');
  d.innerHTML = s;
  return !!(d.getElementsByTagName('*').length);
}
当然,在文本中仍然可能有标记,只是它是无效的,所以不会创建元素。但是与其他文本结合,它可能是有效的标记。

防止xss攻击最有效的方法是替换所有的<,>和&人物与&lt;, &gt;, &amp; .

有来自OWASP的javascript库。我还没有使用过它,所以不能告诉你任何关于质量的问题。链接如下:https://www.owasp.org/index.php/ESAPI_JavaScript_Readme