Regex: соответствие параметров sql без двойных кавычек - PullRequest
0 голосов
/ 08 декабря 2011

Я имею дело с SQL-инъекцией, и мне нужно заменить параметры sql в тегах запросов coldfusion тегами cfquerparam.Для этого я сопоставляю все, что похоже на параметры в этом:

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

, но не

<cfqueryparam value="#test123#">

Текущее регулярное выражение, которое я имею:

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

В настоящее время он найдет все параметры sql, но также и test123 в cfqueryparam.Что мне нужно сделать, и где у меня ничего не получается, это исключить #param# в двойных кавычках.Итак, нет "#test123#", но все в порядке.

Я попытался добавить [^"]? перед ним, но затем он также начинает выбирать другие символы перед совпадением.То же самое происходит сзади.

У кого-нибудь есть исправление для этого?

Ответы [ 4 ]

1 голос
/ 08 декабря 2011

Вы хотите использовать cfqueryparam, это свяжет параметры и предотвратит любые инъекции SQL.

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

Вы можете использовать% внутри тега как таковой:

<cfqueryparam cfsqltype="cf_sql_varchar" value="%#test#%" />
0 голосов
/ 09 декабря 2011

хммм, этот кажется немного более полным:

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

отделяет ['%]? в [']? [%]? вроде бы лучше, иначе в заявлении убрал запятую вставить в бла (col1, col2) значения ('# val1 #', '# val2 #')

0 голосов
/ 09 декабря 2011

Да, спасибо.Мне нужно было немного его изменить, этот идеально подходит для меня:

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

в этом примере:

выберите *, '# attrivutes.name #' из таблицы, где test = # var2 #, test = '# var3 #' test2 like '% # test #%' test3 like '%# test # 'test4 like' # test #% '

(поместите его в http://www.regextester.com/)

Единственная незначительная проблема заключается в том, что он также захватывает пространство перед # var2 #, но этопока что это не большая проблема. Если кто-нибудь знает, как это исправить, я был бы очень рад извлечь уроки из этого.

0 голосов
/ 08 декабря 2011

мне кажется, что вы просто не хотите?в [^ "]? Это работает для меня: [%'][^"]?#([^#]*)#['%]?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...