我正在处理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#"
但是所有的都没问题。
我尝试在其前面添加[^"]?
,但之后它也会开始在匹配前选择其他字符。后面也是如此。
有没有人对此有解决方法?
答案 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;)