我有一个SQL查询,它由一个非常有限的内部框架参数化。查询如下所示:
Select * from somewhere
where name IN (:parameter);
代码会将零到多个字符串注入到由:parameter指定的位置。 “:parameter”标志只能在“IN”子句中使用(因此无法在where子句之后移动以有条件地插入“name IN”)部分。
有时用户会将参数设置为:
'dog','cat'
其他时候,用户不会将任何值放入:parameter变量。这会导致问题,因为生成的SQL查询将是:
Select * from somewhere
where name IN ();
我的代码可以捕获参数为空的情况,但我需要一些可以注入IN语句的东西,它保证永远不会与实际的字符串匹配。
是否有任何我可以注入的SQL正则表达式,它永远不会匹配任何字符串?像%。%或类似东西......
谢谢!
答案 0 :(得分:16)
你可以说:
where name in (null)
这永远不会匹配,因为没有任何东西等于null
(甚至不是null
本身。)
答案 1 :(得分:4)
null
不应与任何内容匹配。
答案 2 :(得分:0)
我认为您无法保证永远不会匹配现有字符串。你可以做的最好的事情是处理语句对数据库不起作用的情况;但是,在不知道脚本如何执行的情况下,我无法从中找到更多信息。
答案 3 :(得分:0)
名称不能为空,所以你可以做空字符串吗?