如果在URL GET参数中包含指定的单词,则忽略URL

时间:2016-07-01 10:25:00

标签: regex

我正在编写可能显示潜在危险HTTP请求的脚本,但我不知道如何正确过滤HTTP请求中的URI。我们的想法是查看GET参数中是否包含任何URL,但忽略使用指定单词添加到GET参数的URL(例如,名称为goto的GET参数可以包含任何URL。所以如果有启动这样的要求......

GET /check/request?first=1&second=http://domain.tld/something&third=3 HTTP/1.1

......一定要匹配。如果我们有其他请求的起始线,如...

GET /check/request?goto=http://domain.tld/something HTTP/1.1

......应该忽略这一点。

与URL匹配的任何行的基本正则表达式为:

^(GET|POST).*\?.*\=http\:\/\/.* HTTP\/.*$

我试图正确地修改它,但我的版本只匹配URL本身包含单词goto的行,而不是参数:

^(GET|POST).*\?.*(?!.*goto)\=http\:\/\/.* HTTP\/.*$

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

<强>更新

^(GET|POST).*\?.*(?<!goto)\=http\:\/\/.* HTTP\/.*$

检查here

答案 1 :(得分:1)

你的意思可能是http://.*,而不是向.*前瞻:

^(GET|POST).*\?.*(?<!goto)\=http\:\/\/

请参阅regex101上的示例。