我正在考虑允许用户插入他们自己的 REGEXP 模式,该模式将在 Mysql 查询中使用。我很清楚 sql 注入风险,并且我知道无法将正则表达式模式值作为参数传递给准备好的语句。
是否有一种防水的方法可以安全地允许用户在 sql 查询中提供自己的正则表达式模式,还是我应该放弃这个想法?
顺便说一句,我正在使用 PHP,所以我基本上是在询问 PHP 中是否有可能确保模式是有效的、真实的和无害的。
我正在考虑允许用户插入他们自己的 REGEXP 模式,该模式将在 Mysql 查询中使用。我很清楚 sql 注入风险,并且我知道无法将正则表达式模式值作为参数传递给准备好的语句。
是否有一种防水的方法可以安全地允许用户在 sql 查询中提供自己的正则表达式模式,还是我应该放弃这个想法?
顺便说一句,我正在使用 PHP,所以我基本上是在询问 PHP 中是否有可能确保模式是有效的、真实的和无害的。
好问题!我的经验是,一般用户没有受到足够的“教育”来输入“真正的”正则表达式。“标准”用户认为星号已经非常复杂。/^([^[0-9]+\s[a-z]*)/i
“普通”用户很少使用类似的模式。可能会更好地建议您为用户提供更简单的元字符作为通配符。除非您想将该工具用作管理员工具……对于知道自己在做什么的人。
我没有为 mysql 做过这个,但我为另一个 dbms 做过一次类似的事情
我所做的是:
此外,您可以:
话虽如此,我认为您无法完全消除风险。编辑:特别是如果您也想避免拒绝服务攻击。