正则表达式检测字符串中的 Javascript

Posted

技术标签:

【中文标题】正则表达式检测字符串中的 Javascript【英文标题】:Regex to detect Javascript In a string 【发布时间】:2010-12-04 00:09:30 【问题描述】:

我正在尝试在我的查询字符串值中检测 javascript

我有以下 c# 代码

    private bool checkForXSS(string value) 
    
        Regex regex = new Regex(@"/((\%3C)|<)[^\n]+((\%3E)|>)/I"); 

        if (regex.Match(value).Success) return true; 

        return false; 
    

这适用于检测&lt;script&gt;&lt;/script&gt; 标签,但不幸的是,如果没有标签,则无法达到匹配。

正则表达式是否可以匹配 JavaScript 关键字和分号等?

这并不意味着涵盖所有 XSS 攻击基地。只是一种检测可以在字符串值中的简单 JS 攻击的方法。

谢谢

【问题讨论】:

好的,然后你必须检测子字符串“onmouseover”等的存在...阅读我的帖子***.com/questions/1520973/… 【参考方案1】:

第 1 条规则:使用白名单,而不是黑名单。

您正在阻止一种执行 XSS 的方法,而不是任何一种。为此,您必须根据您应该接受的用户输入来验证输入,即

如果您需要一个数字,请根据 /^\d1, n$/ 验证输入 如果您需要一个字符串,请根据 /^[\s\w\.\,]+$/ 等验证它...

欲了解更多信息,请开始阅读Wikipedia entry、entry at OWASP、webappsec articles 和一些随机的blog entries written by unknown people

【讨论】:

可悲的是没有人能听到“不知名的人”的笑话【参考方案2】:

这是一种非常蹩脚的防止跨站点脚本攻击的方法。您需要使用完全不同的方法:确保用户提供的输入是:

    经过验证,使其与正在收集的数据的语义相匹配;

    每次用于构造表达式以由某些语言解释器(SQL、html、Javascript - 即使转到纯文本日志文件时)解释时,都会适当引用。适当的引用完全取决于输出上下文,没有单一的方法可以做到。

【讨论】:

我正在选择一个现有的应用程序,其中查询字符串被放置到页面中。我需要检查 javascript 的值,例如警报、功能、事件等和 HTML。我上面的正则表达式检查标签,但不检查 JS 关键字等。我想在将 JS 放入页面之前将其剥离。 对不起,我真的不明白这是什么意思。【参考方案3】:

嵌入 javascript 的方法有很多。例如

  %3Cp+style="expression(alert('hi'))"

将通过您的过滤器。

你可能找不到一个能找到所有 JS 并且不会拒绝很多有效查询字符串的神奇正则表达式。

这种检查可能有用,但它应该只是纵深防御的一部分。

【讨论】:

【参考方案4】:

检查&lt;script标签是否存在就足够了。

private bool checkForXSS(string value) 

    return value.IndexOf("<script") != -1;

【讨论】:

错误。 onclickonmouseover等可以不带脚本标签而存在。 我能想到一些其他的方法来规避这个问题;这是一个糟糕的方法。

以上是关于正则表达式检测字符串中的 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 正则

JavaScript 如何检测正则表达式?

Javascript/jQuery - 使用正则表达式解析字符串中的主题标签,URL 中的锚点除外

javascript正则表达式对象方法 compile() exec() test()的比较

教你轻松搞定javascript中的正则

SQL中的正则表达式来检测一个或多个数字