2011-12-08 69 views
0

我正在处理SQL注入,我需要用cfquerparam标签替换coldfusion querytags中的sql参数。 对于这个我匹配任何看起来像这样的PARAMS:正则表达式:匹配没有双引号的sql参数

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

但不

<cfqueryparam value="#test123#"> 

当前的正则表达式我已经是:

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

目前这会发现所有sql params,但也在cfqueryparam中的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#%" /> 
+0

从我阅读提问者已经知道的问题中看出,他希望使用'cfqueryparam',但他试图找到当前缺失的所有地方,并且需要在搜索中使用正则表达式的帮助。 – ale

+0

正确。我知道如何防止它,但我的正则表达式已完成99%,它只是需要一点帮助,让我的正则表达式不匹配“%test%”(包括双引号)。 对于当前的正则表达式,我仍然需要检查正则表达式中返回值的双引号并将其删除。 – Mattijs

0

是的,谢谢 我也需要改变它一下,这一个完美的作品对我来说:

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

这个例子

选择*, '#attrivutes.name#' 从表 其中 测试=#VAR2#, 测试= '#VAR3#' TEST2 LIKE“%#测试#% “ TEST3 LIKE '%#测试#' TEST4像 '#测试#%'

(砸在http://www.regextester.com/

只有轻微的问题是,它也捕捉空间盈的#VAR2#但那不是现在是一个大问题。如果有人知道如何解决这个问题,我会很乐意从中学习。

0

嗯,这一次似乎是有点更完整: '?[%] [^“]#([^#] *)#[%]?

[] [']

将['%]?分隔为[']?[%]?('#val1#','#val2#')

相关问题