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