关于正则表达式模式的困惑

我试图编写一个正则表达式来捕获句子中的某些单词,但是它不起作用。下面的正则表达式仅在我给出完全匹配时才有效。

[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))

假设我发送了一个HTTP标头-headerName = insert可以正常工作,

但是当我给headerName = awesome insert number

时不起作用

-编辑-

@ user1180,是的,我可以使用准备好的语句,但是我们也在研究正则表达式部分。

@Marcel和Wiktor,是的,它正在该网站上运行。我猜我的工具无法识别正则表达式。我正在使用Mulesoft ESB,后者使用Matches when the evaluated value fits a given regular expression (regex),specifically a regex "flavor" supported by Java.

它正在使用这样的东西, matches /\+(\d+)\s\((\d+)\)\s(\d+\-\d+)/,但我不知道如何以这种正则表达式格式编写用例。

我的用例太赶上SQL注入模式,它将检查请求标头/ queryparam中的delete (exec)(drop\s*table)(insert)(shutdown)(update)or参数。

iamhenry_c_s_d_n 回答:关于正则表达式模式的困惑

由于您的正则表达式必须与整个输入匹配,因此需要用.*包装模式,类似于(?s).*(<YOUR PATTERN>).*

使用

(?s).*\b(delete|exec|drop\s+table|insert|shutdown|update|or)\b.*

详细信息

  • (?s)-开启DOTALL模式,其中.匹配任何字符
  • .*-任意0个以上的字符,并且尽可能多
  • \b(delete|exec|drop\s+table|insert|shutdown|update|or)\b-组中整个单词中的任何一个(注意\b是单词边界构造)
  • .*-任意0个以上的字符,并且尽可能多

我还用drop\s*table替换了drop\s+table,因为我猜想droptable是不应该的。

本文链接:https://www.f2er.com/3023388.html

大家都在问