使用用户的正则表达式是否安全?
2022-08-30 23:35:37
我想在我的网站上添加一个功能,让用户使用搜索文本。但是,让用户做这样的事情安全吗?RegEx
preg_match('/' . $user_input_regex . '/', $subject);
我想在我的网站上添加一个功能,让用户使用搜索文本。但是,让用户做这样的事情安全吗?RegEx
preg_match('/' . $user_input_regex . '/', $subject);
此代码可能存在一种攻击,称为 ReDoS 攻击(正则表达式拒绝服务)。
正则表达式拒绝服务 (ReDoS) 是一种拒绝服务攻击,它利用了这样一个事实,即大多数正则表达式实现可能会达到导致其工作速度非常慢(与输入大小呈指数级相关)的极端情况。然后,攻击者可以使使用正则表达式的程序进入这些极端情况,然后挂起很长时间。
特别是对于preg_match
存在可能导致 PHP 分段错误的已知问题。
所以答案是否定的,由于这些问题,它是不安全的。
在安全性方面,您永远不应该信任用户输入,因此这取决于您对输入执行的操作。在给定的情况下,您至少应该对用户输入中使用的分隔符(反斜杠)进行转义,以确保正则表达式正常工作。