PHP-拒绝服务正则表达式

时间:2018-07-24 00:11:55

标签: php regex

当我的代码使用我们的内部软件进行OWASP top 10扫描时,会引发以下错误:

if (preg_match("/^attachment; filename=\"".$_GET['get_part']."\"$/",$part['Content-Disposition']))  

他们给出的解释是:

  

正则表达式评估器和相关方法的实现中存在一个漏洞,当评估嵌套和重复的正则表达式组的重复和交替重叠时,可能导致线程挂起。此缺陷可用于执行拒绝服务(DoS)攻击。

没有已知的正则表达式实现可以抵抗此漏洞。

如何摆脱这种情况?

1 个答案:

答案 0 :(得分:4)

您不应将用户输入直接用作正则表达式的一部分。使用preg_quote()对其进行转义,以便从字面上进行匹配。

if (preg_match("/^attachment; filename=\"".preg_quote($_GET['get_part'], '/')."\"$/",$part['Content-Disposition']))