正则表达式也会导致拒绝服务?探讨 ReDos(可能会中招哦)

本文介绍了正则表达式如何引发ReDoS拒绝服务攻击,详细阐述了正则表达式的匹配原理,展示了有害正则表达式的例子,以及这种攻击的可利用性和潜在危害。提出了包括避免使用复杂正则、使用安全正则表达式、在线测试正则、安全扫描用户输入和选择高效正则引擎在内的缓解措施。
摘要由CSDN通过智能技术生成

介绍

当您想到拒绝服务攻击时,您会想到什么?可能是一大群机器人试图访问 Web 服务器的资源以使其瘫痪。好吧,这肯定是导致拒绝服务攻击的一种方式。但是,还有一种您可能没有听说过的方式。它被称为 ReDoS,是由正则表达式引起的。

正则表达式?但这怎么可能呢?那不是通过使用过滤器来匹配字符串、将字符串列入白名单和黑名单,从而使我们的工作更轻松吗?是的,但是攻击者也可以利用它来使应用程序(服务器)屈服。让我们了解如何!

正则表达式是什么?

简而言之,正则表达式是一种用于匹配(编程语言中)字符串的模式。让我们通过一个示例来理解它吧,该示例是“用正则表达式在服务器端验证电子邮件地址”。

let regex = new RegExp('[a-z0-9]+@[a-z]+\.[a-z]{2,3}');
let testEmails = ["notanemail.com", "workingexample@email.com", "another_working@somethingelse.org", "notworking@1.com"];
testEmails.forEach((address) => {
    console.log(regex.test(address))
});

上面是一段 JavaScript 代码。我们在这里使用的正则表达式是 [a-z0–9]+@[a-z]+\.[a-z]{2,3}。我们提供了几个电子邮件地址,然后我们需要检查它们是否遵循电子邮件地址的一般模式。让我们分解一下正则表达式。

  • [a-z0–9]+:表示此处的字符串可以是任何小写字母和数字。末尾的加号 (+) 表示必须至少有一个字符(无论是小写字母还是数字)。

  • @:表示此处应该有 AT(@)符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值