使用用户的RegEx是否安全?

Sdg*_*sgf 16 php regex user-input code-injection preg-match

我想在我的网站上添加一项功能,让用户搜索文本RegEx.但是,让用户做这样的事情是否安全?

preg_match('/' . $user_input_regex . '/', $subject);
Run Code Online (Sandbox Code Playgroud)

Sil*_*Fox 12

此代码可能存在攻击,称为ReDoS攻击 (正则表达式拒绝服务).

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

特别是preg_match有一个已知问题可能导致PHP分段错误.

所以答案是否定的,因为这些问题不安全.

  • 您总是可以使用基于DFA的正则表达式实现,因为它们具有线性最坏情况而不是指数(尽管它们具有*某些*限制)但不会出现此类问题. (3认同)
  • 为什么不给搜索一个时间限制?如果搜索>"x"秒,则中止. (2认同)