我最近意识到正则表达式拒绝服务攻击,并决定在我的代码库中找到所谓的"邪恶"正则表达式模式 - 或者至少在用户输入上使用它们.上面的OWASP链接和维基百科提供的示例很有帮助,但他们并没有很好地用简单的术语解释问题.
来自维基百科的邪恶正则表达式的描述:
通过示例,再次来自维基百科:
(a+)+([a-zA-Z]+)*(a|aa)+(a|a?)+(.*a){x} 对于x> 10这是一个没有更简单解释的问题吗?我正在寻找能够在编写正则表达式时更容易避免这个问题,或者在现有代码库中找到它们的东西.
我有ASP.NET MVC网页,我使用DataAnnotation来验证客户端的表单.其中一个视图类具有如下属性:
[StringLength(100, MinimumLength = 3, ErrorMessage = "Länken måste vara mellan 3 och 100 tecken lång")]
[Display(Name = "Länk")]
[RegularExpression(@"^(http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?)?$", ErrorMessage="Länkgen är inte giltlig")]
public string Url { get; set; }
Run Code Online (Sandbox Code Playgroud)
在视图中,我将此代码用于属性:
@Html.LabelFor(c => c.Url, true)
@Html.TextBoxFor(c => c.Url, new { @class = "tb1", @Style = "width:400px;" })
@Html.ValidationMessageFor(model => model.Url)
Run Code Online (Sandbox Code Playgroud)
粘贴到这样的URL时:
http://95rockfm.com/best-voicemail-giving-play-by-play-of-car-accident/
网页将锁定,我无法在wepage上做任何事情.如果我将其粘贴到:
http://95rockfm.com/best-voicemail-giving-play-by-play-of-car-accident
它工作得很好.
这些javascript文件包含在网页的底部:
<script type="text/javascript" src="/Scripts/jquery.qtip.min.js"></script>
<script src="/Scripts/jquery-1.7.1.min.js"></script>
<script src="/Scripts/jquery-ui-1.8.20.min.js"></script>
<script src="/Scripts/jquery.validate.min.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
完全相同的问题同时适用于IE和Chrome.然而,IE将回来并说一个脚本花了很长时间,一个按钮停止脚本.但是当切换输入控件时,脚本将再次运行并查看网页.
我没有使用任何自定义的东西,为什么我得到这个?