std :: regex构造函数安全吗?

时间:2019-03-07 12:47:46

标签: c++

只需确保:
std::basic_regex的构造函数必须检测无效的表达式,如果不正确则抛出异常。对?因此,假设我信任我的STL实现者,我可以将仲裁字符串传递给它,并且我将获得一个有效的regex对象或一个异常-没有UB或类似的东西?

有人知道错误的std::basic_regex实现(编辑:或正则表达式库的其他部分)对错误输入的鲁棒性吗?

1 个答案:

答案 0 :(得分:3)

假设标准库没有错误(如P.W指出的那样),则存在一种更普遍的攻击,称为OWASP

  

正则表达式拒绝服务(ReDoS)是一种拒绝服务攻击,它利用了一个事实,即大多数正则表达式实现可能会遇到极端情况,导致极端缓慢地工作(与输入大小成指数关系)。然后,攻击者可以使使用正则表达式的程序进入这些极端情况,然后挂起很长时间。

因此,我至少要限制允许输入的大小,以使您的程序无法被DOS处理。其次,测试发动机坚固性的通用方法是通过模糊测试。那里有许多模糊测试库,GitHub上的一些项目包含明确用于笔测试的“顽皮”字符串。您可能会发现值得对各种引擎进行模糊处理以查看它们在哪里发生故障。