【问题标题】:Regex to detect Javascript In a string正则表达式检测字符串中的 Javascript
【发布时间】: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 攻击的方法。

谢谢

【问题讨论】:

标签: c# javascript regex xss


【解决方案1】:

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

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

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

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

【讨论】:

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

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

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

  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等可以不带脚本标签而存在。
    • 我能想到一些其他的方法来规避这个问题;这是一个糟糕的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多