关于正则表达式模式的困惑
Confusion regarding regex pattern
我尝试编写一个正则表达式来捕获句子中的某些单词,但它不起作用。以下正则表达式仅在我给出完全匹配时才有效。
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))
假设我发送了一个 HTTP Header - 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 注入模式,它会检查请求 header/queryparam 的 delete (exec)(drop\s*table)(insert)(shutdown)(update)or
参数。
由于您的正则表达式必须匹配整个输入,您需要用 .*
包裹模式,类似于 (?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
不是预期的。
我尝试编写一个正则表达式来捕获句子中的某些单词,但它不起作用。以下正则表达式仅在我给出完全匹配时才有效。
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))
假设我发送了一个 HTTP Header - 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 注入模式,它会检查请求 header/queryparam 的 delete (exec)(drop\s*table)(insert)(shutdown)(update)or
参数。
由于您的正则表达式必须匹配整个输入,您需要用 .*
包裹模式,类似于 (?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
- 组 中的任何一个完整单词(注意.*
- 任何 0+ 个字符,尽可能多
\b
是单词边界结构)
我还用 drop\s+table
替换了 drop\s*table
因为我猜 droptable
不是预期的。