正则表达式匹配 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版本,但我认为很容易迁移到其他语言。
安全风险
使用正则表达式有一些风险,因为坏人可以构造恶意的parameter1
或parameter2
来欺骗正则表达式,你会得到意想不到的结果,尤其是解码后URL.
例如url
app.company.com/base-path?parameter1=stuff¶meter2=%26parameter3%3Dmorestuff¶meter3=IMPORTANT%20THING
坏人设置parameter2=%26parameter3%3Dmorestuff
,解码后得到这个url
app.company.com/base-path?parameter1=stuff¶meter2=¶meter3=morestuff¶meter3=IMPORTANT THING
而你从正则表达式中得到的是parameter3=morestuff¶meter3=IMPORTANT THING
,这是出乎意料的。
所以,如果你真的想使用正则表达式,不要在匹配前解码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版本,但我认为很容易迁移到其他语言。
安全风险
使用正则表达式有一些风险,因为坏人可以构造恶意的parameter1
或parameter2
来欺骗正则表达式,你会得到意想不到的结果,尤其是解码后URL.
例如url
app.company.com/base-path?parameter1=stuff¶meter2=%26parameter3%3Dmorestuff¶meter3=IMPORTANT%20THING
坏人设置parameter2=%26parameter3%3Dmorestuff
,解码后得到这个url
app.company.com/base-path?parameter1=stuff¶meter2=¶meter3=morestuff¶meter3=IMPORTANT THING
而你从正则表达式中得到的是parameter3=morestuff¶meter3=IMPORTANT THING
,这是出乎意料的。
所以,如果你真的想使用正则表达式,不要在匹配前解码URL