2016-07-01 12 views
0

危険なHTTPリクエストを表示するスクリプトを作成していますが、HTTPリクエストのURIを正しくフィルタリングする方法がわかりません。考え方は、GETパラメータにURLが含まれているかどうかを調べることですが、指定された単語でGETパラメータに追加されたURLを無視します(たとえば、GETパラメータには任意のURLを含めることができます。この...URLに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\/.*$ 

任意の助けをいただければ幸いです。あなたはおそらく.*http://.*ではなく、先読みに戻り読み意味

答えて

1

UPDATE

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

チェックhere

+0

gotoパラメータがGETクエリの最初のものである場合、または1つしかない場合に役立ちます... gotoパラメータがGETクエリのどこにでもある可能性があるため、私が提供した例はおそらく少し間違っています... – user1257255

+0

すぐに答えを更新する –

+0

答えが更新されたかどうかを確認してください –

1

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

regex101上の例を参照してください。

関連する問題