可能的重复:
在 PHP 中清理用户提供的正则表达式
假设您想让用户搜索某些内容,并且您的搜索功能能够接受正则表达式。
是否可以让网站用户通过他们发布的正则表达式进行搜索?从用户的角度来看,我喜欢一个能让我这样做的网站:D
是否涉及任何安全风险?如何清理正则表达式?
可能的重复:
在 PHP 中清理用户提供的正则表达式
假设您想让用户搜索某些内容,并且您的搜索功能能够接受正则表达式。
是否可以让网站用户通过他们发布的正则表达式进行搜索?从用户的角度来看,我喜欢一个能让我这样做的网站:D
是否涉及任何安全风险?如何清理正则表达式?
我没有看到直接的安全风险,但我看到了与性能相关的问题,这些问题很容易导致严重的停机。这有两种口味,太复杂的和太宽泛的。例如,考虑一个类似的查询.*
- 使用一个大数据库,我已经看到即使是其中的几个也可以很容易地关闭系统。
我会使用实际的实时数据库以外的其他东西执行用户搜索,最好是从内存中的缓存结果中执行,这并不重要。
或者只实现评论中建议的通配符(*,?)。它们都更加用户友好且更易于处理。
如果正则表达式不影响编程代码,则没有真正的安全风险。我相信,它经常没有实现的原因是它是一个昂贵的过程,我从未见过它在 SQL 中使用过,所以你需要获取所有正在搜索的内容,然后在其上运行正则表达式,而不是比 SQLlike
或精确匹配等所允许的简单性。