首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >regex:试图改进这个regex

regex:试图改进这个regex
EN

Stack Overflow用户
提问于 2011-12-12 01:23:29
回答 2查看 349关注 0票数 0

我用的是这个正则表达式:

代码语言:javascript
复制
[']?[%]?[^"]#([^#]*)#[%]?[']?

关于这一案文:

代码语言:javascript
复制
insert into table (id,name,age) values ('#var1#' ,#var2#,'#var3#', 3, 'name') where id = '#id#' like "" 
and test=<cfqueryparam value="#id#">

出于某种原因,它正在捕获#var2#'#var3#'之间的逗号,但是当我包含一个[^,]时,它开始执行一些奇怪的操作。有人能帮我处理这件事吗。

当我现在阅读我的regex时,它应该能找到以下内容:

percentage

  • doesn't
  • 可能有一个单引号
  • 可能有一个双引号
  • 然后没有散列,但所有其他characters
  • then都有一个散列,后面跟着一个百分比或引用

那么,为什么,当我在前面加上“没有逗号”时,正则表达式会中断吗??

最新问题:

好的,我试着解释一下:查询可以如下所示:

代码语言:javascript
复制
SELECT  e.*, m.man_id, m.man_title, c.cat_id, c.cat_name
FROM    ec_products e, ec_categories c, ec_manufacturers m
WHERE   c.cat_id = e.prod_category AND
        e.prod_manufacturer = m.man_id AND
        e.prod_title LIKE <cfqueryparam value="%#attributes.keyword#%"> and
test='#var1#'
ORDER BY e.prod_title  

现在,我想要##之间的每个值,而不是被queryparam标记包围的值。因此,在这个示例中,我确实需要#var1#,但不需要#attributes.keyword#。原因是查询中没有标签包围的所有参数都是不安全的,可能导致SQL注入。我现在的判断力是

代码语言:javascript
复制
(?!")'?%?#(?!\d)[\w.\(\)]+#%?'?(?!")

就快到了。它确实找到了attributes.keyword,因为%。我只想要任何有##但不被双引号包围的东西,所以不想要"##"。这将给出sql中所有不安全的参数,如'#var#'#aNumber#'%##''%##%''##%,但不像

代码语言:javascript
复制
<cfqueryparam value="#variable#">

。我希望你能理解我的意图?

EN

回答 2

Stack Overflow用户

发布于 2011-12-12 01:39:25

将捕获组从初始正则表达式中保存下来,下面是一个修改后的表达式。

代码语言:javascript
复制
'?%?(?!")#([^#]+)#%?'?
票数 1
EN

Stack Overflow用户

发布于 2011-12-12 01:34:18

根据您提供的信息,这应该是正确的。

代码语言:javascript
复制
'?%?(?!")#[^#]+#%?'?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8468971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档