0

可能的重复:
在 PHP 中清理用户提供的正则表达式

假设您想让用户搜索某些内容,并且您的搜索功能能够接受正则表达式。

是否可以让网站用户通过他们发布的正则表达式进行搜索?从用户的角度来看,我喜欢一个能让我这样做的网站:D

是否涉及任何安全风险?如何清理正则表达式?

4

3 回答 3

2

主要风险是正则表达式非常复杂,会运行很长时间或达到引擎的递归限制。见这篇文章。如果您让您的用户在错误的地方使用正则表达式替换,则可能会出现其他风险,因为这会引入代码注入的风险。但是匹配本身除了 DoSing 你的服务器之外并不能真正造成任何其他伤害。

最近有一个关于如何识别这些危险的正则表达式的问题,并且一致认为这通常是不可能的。看问题。

您最好限制正则表达式搜索的时间,如果时间太长则中止它。

于 2012-10-17T10:41:29.263 回答
2

我没有看到直接的安全风险,但我看到了与性能相关的问题,这些问题很容易导致严重的停机。这有两种口味,太复杂的和太宽泛的。例如,考虑一个类似的查询.*- 使用一个大数据库,我已经看到即使是其中的几个也可以很容易地关闭系统。

我会使用实际的实时数据库以外的其他东西执行用户搜索,最好是从内存中的缓存结果中执行,这并不重要。

或者只实现评论中建议的通配符(*,?)。它们都更加用户友好且更易于处理。

于 2012-10-17T10:42:59.823 回答
1

如果正则表达式不影响编程代码,则没有真正的安全风险。我相信,它经常没有实现的原因是它是一个昂贵的过程,我从未见过它在 SQL 中使用过,所以你需要获取所有正在搜索的内容,然后在其上运行正则表达式,而不是比 SQLlike或精确匹配等所允许的简单性。

于 2012-10-17T10:42:15.783 回答