正则表达式匹配 url 的两个部分

Regex to match two parts of a url

这是我对 Whosebug 的第一个问题...如果我在提问时违反了规则,请提前致歉。我已经搜索了我的问题,但找不到与我正在寻找的内容相关的任何内容,而且我已经通读了问题发布指南...

我正在尝试创建一个 RegEx 模式,它将匹配 URL 的两个部分。

示例URL:

app.company.com/base-path?parameter1=stuff¶meter2=morestuff¶meter3=重要%20THING

在这种情况下,我希望模式在存在基本路径和第三个参数的情况下匹配,因此两者: /base-path 和所有 parameter3=IMPORTANT%20THING

如有任何帮助,我们将不胜感激!如果我可以提供更多信息,请告诉我...

这是我的答案,你可以测试一下here

/^.+?(\/.+?)\?.+?&(parameter3=.+)$/gm

我不知道你用的是什么语言,这是用于PHP 7.3+的PCRE2版本,但我认为很容易迁移到其他语言。

安全风险

使用正则表达式有一些风险,因为坏人可以构造恶意的parameter1parameter2来欺骗正则表达式,你会得到意想不到的结果,尤其是解码后URL.

例如url

app.company.com/base-path?parameter1=stuff&parameter2=%26parameter3%3Dmorestuff&parameter3=IMPORTANT%20THING

坏人设置parameter2=%26parameter3%3Dmorestuff,解码后得到这个url

app.company.com/base-path?parameter1=stuff&parameter2=&parameter3=morestuff&parameter3=IMPORTANT THING

而你从正则表达式中得到的是parameter3=morestuff&parameter3=IMPORTANT THING,这是出乎意料的。

所以,如果你真的想使用正则表达式,不要在匹配前解码URL