我正在编写可能显示潜在危险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\/.*$
任何帮助都将不胜感激。