正则表达式:匹配没有双引号的sql参数

时间:2011-12-08 03:20:29

标签: regex coldfusion

我正在处理SQL注入,我需要通过cfquerparam标记替换coldfusion querytags中的sql params。 为此,我匹配任何看起来像这样的参数:

select * from table
where
test = #var2#,
test ='#var3#'
test2 like '%#test#%'
test3 like '%#test#'
test4 like '#test#%'

但不是

<cfqueryparam value="#test123#">

我目前的正则表达式是:

[%']?#([^#]*)#['%]?

这将在cfqueryparam中找到所有sql参数,还有test123。 我需要做什么,以及我没有成功的地方,是用双引号括起来#param#。 所以,没有"#test123#"但是所有的都没问题。

我尝试在其前面添加[^"]?,但之后它也会开始在匹配前选择其他字符。后面也是如此。

有没有人对此有解决方法?

4 个答案:

答案 0 :(得分:1)

您想使用cfqueryparam,这将绑定参数并阻止任何类型的SQL注入。

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f6f.html

您实际上可以使用标记内的%:

<cfqueryparam cfsqltype="cf_sql_varchar" value="%#test#%" />

答案 1 :(得分:0)

在我看来,你只是不想要的?在[^“]? 这对我有用:[%'][^"]?#([^#]*)#['%]?

答案 2 :(得分:0)

是的,谢谢。 我确实需要改变它,这个对我来说非常适合:

[% '] [^“]#([^#] *)#[' %]

就这个例子而言:

从表中选择*,'#attrivutes.name#' 哪里 test =#var2#, test ='#var3#' test2喜欢'%#test#%' test3喜欢'%#test#' test4喜欢'#test#%'

(放入http://www.regextester.com/

唯一的小问题是它也占据了#var2#的空间,但现在这不是一个大问题。如果有人知道如何解决这个问题,我将非常乐意从中吸取教训。

答案 3 :(得分:0)

嗯,这个似乎有点完整:

[&#39;]?[%] [^&#34;]?#([^#] *)#[%] [&#39;]?

分开[&#39;%]?进入[&#39;]?[%]?似乎更好,否则它在声明中删除了一个逗号 插入bla(col1,col2) 价值观(&#39;#val1#&#39;,&#39;#val2#&#39;)