【发布时间】:2019-11-27 08:12:10
【问题描述】:
我试图编写一个正则表达式来捕捉句子中的某些单词,但它不起作用。以下正则表达式仅在我给出完全匹配时才有效。
[\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 注入模式,它会检查请求标头/查询参数中的 delete (exec)(drop\s*table)(insert)(shutdown)(update)or 参数。
【问题讨论】:
-
您要匹配的单词/术语的完整列表是什么?
-
它确实对我有用。看到这个example
-
这些看起来像 SQL 语句。你想阻止注射吗?如果是这样,通常最好使用准备好的语句。
-
所以你只需要用
(?s).*(<YOUR PATTERN>).*包装模式。试试(?s).*\b(delete|exec|drop\s+table|insert|shutdown|update|or)\b.* -
谢谢,Wiktor 正在运行。请保留它作为答案,我会接受它。顺便说一句,您是否推荐任何作为新手学习正则表达式的材料/网站?
标签: regex regex-lookarounds regex-negation