繁体   English   中英

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

[英]Regex to detect Javascript In a string

我正在尝试在我的querystrings值中检测JavaScript。

我有以下C#代码

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

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

        return false; 
    }

这可用于检测<script></script>标记,但不幸的是,如果没有标记,则无法匹配。

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

这并不意味着涵盖所有XSS攻击基础。 这是一种检测简单JS攻击的方法,该攻击可能位于字符串值中。

谢谢

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

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

  • 如果需要一个数字,请针对/^\\d{1, n}$/验证输入
  • 如果需要一个字符串,请针对/^[\\s\\w\\.\\,]+$/等进行验证。

有关更多信息,请开始阅读Wikipedia条目OWASP上条目webappsec文章以及一些由陌生人撰写的随机博客条目

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

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

  2. 每次用于构造要由某种语言解释器(SQL,HTML,Javascript-甚至是纯文本日志文件)解释的表达式时,均应适当引用。 适当的报价完全取决于输出上下文,没有唯一的方法可以做到。

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

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

将通过您的过滤器。

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

这种检查可能很有用,但仅应作为纵深防御的一部分。

检查标记<script是否存在就足够了。

private bool checkForXSS(string value) 
{
    return value.IndexOf("<script") != -1;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM