.Net4.5新特性:正则表达式超时介绍

“Regex” 在数据验证方面最受欢迎。考虑到您可能对“Regex”完全陌生的。请参考我介绍Regex如何运作的视频。 But because of the typical parsing logic of regex it is exposed to DOS attacks. Let us try to understand in detail what I mean by that. 但是由于正则表达式典型的逻辑解析是暴露在DOS攻击之下的。让我们尝试了解一下细节来明白我为什么这么说。
例如,我们来看一下这个规则表达式-“^(\d+)$”。这个正则表达式的规则是只有数字符合条件。你也可以看一看下面描述正则表达式如何评估输入信息的符号图。现在,假设我们想要验证“123456x”。正如下图所示,正则表达式将走六条路径。

但是如果我们再扩展一位输入参数,它将有七条路径。也就是说,随着输入参数长度的增加,正则表达式的验证需要更多地时间来验证。即:验证所需时间和输入参数的长度为线型关系。

现在让我们把前面的表达式“^(\d+)$”复杂化为“^(\d+)+$”。如果你意识到了这个正则表达式写的非常复杂。而且我们想验证“123456x”。它将执行32条路径。 如果你再添加一个字符,它遍历的路径将变成64条。

也就是说,对上述正则表达式而言,验证输入参数的长度与消耗时间是指数关系。

现在,你可能会问:这些有关系吗?但是我要说的是:当正则表达式执行线性相关的验证时,这个特点可能被黑客利用,以实现DOS攻击。他们可以输入非常长的字符串,使你的应用永远处于挂起状态(始终处于正则验证状态)。
一个比较合适的解决方法是:设置正则操作的超时限制。好消息是,在.NET4.5中,你可以像下面所示代码那样,为正则验证添加一个超时属性。所以,如果你收到任何类型的恶意注入时,你的应用不会陷入死循环。
|
1
2
3
4
5
6
7
8
9
|
try{ var regEx = new Regex(@”^(\d+)+$”, RegexOptions.Singleline, TimeSpan.FromSeconds(2)); var match = regEx.Match(“123453109839109283090492309480329489812093809x”);}catch (RegexMatchTimeoutException ex){ Console.WriteLine(“Regex Timeout”);} |
来自:
http://www.itstrike.cn/Question/10777f22-b683-45ee-a957-c38368823a01
.Net4.5新特性:正则表达式超时介绍的更多相关文章
- ASP.NET4.0新特性
原文:ASP.NET4.0新特性 在以前试用VS2010的时候已经关注到它在Web开发支持上的一些变化了,为此我还专门做了一个ppt,当初是计划在4月12日那天讲的,结果因为莫名其妙的原因导致没有语音 ...
- ES9的新特性:正则表达式RegExp
简介 正则表达式是我们做数据匹配的时候常用的一种工具,虽然正则表达式的语法并不复杂,但是如果多种语法组合起来会给人一种无从下手的感觉. 于是正则表达式成了程序员的噩梦.今天我们来看一下如何在ES9中玩 ...
- Java8新特性: lambda 表达式介绍
一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...
- [转].NET4.0新特性集合贴
vs2010正式版4月12日发布了,前几天我也下了一个,但这几天都没有时间好好试用一下,今天针对C#语言的新特性使用了一下,感觉还不错,有几个新特性和大家分享一下,希望我没有太火星…… 一.新关键词— ...
- .NET4.5新特性async和await修饰符实现异步编程
开篇 每一个版本的.net都会引入一些新的特性,这些特性方便开发人员能够快速实现一些功能.虽然.net版本一直在更新,但是新版本对旧版本的程序都是兼容的,在这一点上微软做的还是非常好的.每次学一个新内 ...
- .NET4.5新特性之异步编程(Async和Await)的使用
一.简介 首先来看看.net的发展中的各个阶段的特性:NET 与C# 的每个版本发布都是有一个"主题".即:C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语 ...
- Oracle10g新特性——正则表达式 - 转
在进行查询时,有时候需要按照一定的特殊规则来查找某个字符串,比如,你可能需要查询第三位为5-8,最后四位为’8888’的所有电话.在9i之前,你可能需要写一个很复杂的条件:Select usernam ...
- hive新特性reflect函数介绍
reflect函数可以支持在sql中调用java中的自带函数,秒杀一切udf函数. 使用案例1:所有记录执行相同的java内置函数 hive中建一张表test_udf:column1(int),col ...
- Java 12 新特性介绍,快来补一补
Java 12 早在 2019 年 3 月 19 日发布,它不是一个长久支持(LTS)版本.在这之前我们已经介绍过其他版本的新特性,如果需要可以点击下面的链接进行阅读. Java 11 新特性介绍 J ...
随机推荐
- 项目笔记---WPF多语言方案
近期由于朋友邀请帮忙给一个开源的游戏“外挂”做一个I18N的解决方案,恰好也是WPF做的,之前有过相关经验,就忙了一个星期终于搞定了,已经提交给作者了,现在这里做一个分享. 这里分享下我个人Fork的 ...
- Django:如何给文章列表添加图片
思路: 使用ajax方式将图片和文本一起通过formData提交到后台,Django后台通过request.POST和request.FILES方式接收数据 1.前端代码 {% extends 'ba ...
- BitAdminCore框架更新日志20180522
20180522更新内容 本次更新增加了excel导入导出示例,QuerySuite组件实现导出导出,用最少代码,做最多的事,代码就是如此简单. 计划修改内容 1.人脸登录功能需要重构,目前功能不完善 ...
- 我所理解的网络游戏<一>:网游的顶层设计
网游的基本结构 各大模块的基本功能如下 · 服务器端 登陆服:处理新建玩家.登陆逻辑. 场景服:处理场景服中的逻辑. 中心服:处理跨服的逻辑,实现不同场景服进程的数据调度,以及向数据库查询数据. 数据 ...
- Day 31 面向对象考试题 第四次考试.
一 基础知识和函数: 1.文件操作有哪些模式?请简述各模式的作用 r ,只读模式[默认模式,文件必须存在,不存在则抛出异常] w,只写模式[不可读:不存在则创建:存在则清空内容] x, 只写模式[不可 ...
- Educational Codeforces Round 34 (Rated for Div. 2) C. Boxes Packing
C. Boxes Packing time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- Jmeter测试计划要素
Jmeter中一个脚本就是一个测试计划,也是一个管理单元.Jmeter的请求模拟与并发数(设置线程数,一个线程即代表一个虚拟用户)设置都在脚本文件中一起设置. 测试计划要素如下: 1.脚本中测试计划只 ...
- 2014年10月Android面试总结
最近打算跳槽,所以到外面逛了一圈,发现外面的世界还是比较精彩的,同时也认识了自己的一些不足,以及作为一个Android开发者,自己后面需要掌握的东西做一下列举. 先介绍下本人的工作经历吧,本人11年7 ...
- D03——C语言基础学习PYTHON
C语言基础学习PYTHON——基础学习D03 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 ...
- 为什么程序员老在改 Bug,就不能一次改好吗?
程序员的日常三件事:写Bug.改Bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含Bug. 但是真的有这么多Bug要改吗?就不能一次改完吗? 程序员听这问题后要拍键盘了,还!真! ...