所以我试图围绕如何安全地组合三个冲突的东西(绑定参数、正则表达式、使用用户输入的部分匹配搜索)来解决问题,我不确定我是否找到了正确/安全的方法来处理这些事物。这不应该是一个不常见的问题,但是处理 PDO 和 php 的所有三个安全因素的交集的文档要么很难找到,要么不存在。
我的需求比较简单和标准,按优先级排列:
- 我想防止sql注入(目前我正在使用绑定参数)
- 我想防止正则表达式注入
- 我想使用用户输入字符串进行部分匹配搜索
因此,例如,我想允许用户搜索不区分大小写的部分匹配的用户名,例如搜索Xiu
将显示用户名Xiu
,Xiulu
并且xiuislowercase
目前我有以下声明:
select * from users where username ilike :search_string || '%'
在其他地方,我使用正则表达式运算符使用更复杂的情况,类似于:
select * from users where username ~* :search_string || '%'
php pdo中的绑定语句在哪里:search_string
,数据库是postgresql。这执行了正确的搜索,返回了正确的结果,并且我有理由确定它是针对 sql 注入的证明,因为它是一个绑定参数。但是,我不确定它是否可以防止正则表达式注入,并且我不知道如何在证明它可以防止 sql-injection 的同时证明它可以防止正则表达式注入。
我如何使用 php、PDO 和 postgresql 完全保护它免受正则表达式注入?