介绍
当您想到拒绝服务攻击时,您会想到什么?可能是一大群机器人试图访问 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(@)符。