我需要让我的用户在搜索中使用星号 (*) 作为通配符。
将星号转换为 % 并在 sql 查询中使用 LIKE 是否安全。
我知道 user-regexp 会导致需要永远计算的常规表达式。 我认为在这种情况下我不可能,但这样做还有其他安全问题吗?
最佳答案
like
表达式中的通配符会导致查询执行发生变化,从而使 RDBMS 使用全表扫描而不是使用索引。当有大量数据时,这可能会减慢查询速度。我建议检查用户输入的第一个星号前至少有几个非通配符。
另请注意,如果将 *
转换为 %
,并使用 LIKE
,则需要注意 _
也是如此,否则它将匹配任何单个字符,而不仅仅是下划线。
关于php - 允许用户使用通配符的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11005760/