2012-06-26 25 views
0

我使用的Web服務器是Apache 2.2。我試圖驗證外部方發送的查詢字符串中的域。在query_string中驗證域名rewritecond

一個有效的請求的例子:無效的請求的 https://something.example.com/aaa/bbb/ccc?returnurl=https://test.example.com/home

例子:

  1. 方案://something.example.com/aaa/bbb/ccc RETURNURL = HTTPS:// something.evil.com/home
  2. scheme://something.example.com/aaa/bbb/ccc?returnurl = http://www.google.com
  3. scheme://something.example.com/ aaa/bbb/ccct?returnurl = https://something.evil.com/blah?url = https://test.example.com/home

所以在我的httpd.conf文件到目前爲止,我有:

RewriteEngine On 

    RewriteCond %{REQUEST_URI} ^/aaa/bbb/ccc$ 
    RewriteCond %{QUERY_STRING} !(\.|https://|http://)example\.com(\.|/)|(\.|https://|http://)exampledev\.com(\.|/) [NC] 
    RewriteRule ^(.*)/[R=403,L] 

上面的代碼基本上看起來查詢字符串,並將用戶重定向到一個禁止頁面,如果exam​​ple.com和exampledev.com是不在query_string中。

這個代碼僅做這項工作作爲無效請求3號將被視爲含有example.com,這可以被認爲是網絡釣魚攻擊

不知怎的,我需要驗證在QUERY_STRING返回域的一部分RETURNURL。

http://或httpd:// a .com或.net或.org或任何其他頂級域名之間的字符串。

有人可以請幫助或建議我如何驗證作爲returnurl查詢字符串返回的域?

回答

0

使用以下命令:

RewriteEngine On 

RewriteCond %{REQUEST_URI} ^/aaa/bbb/ccc$ 
RewriteCond %{QUERY_STRING} !(returnurl|[&]returnurl)=(http|https)://([a-zA-Z0-9]+[.]example[.]com|[a-zA-Z0-9]+[.]exampledev[.]com|example[.]com|exampledev[.]com)[&]{0,1} 
RewriteRule ^(.*)/[R=403,L] 
+0

感謝您的幫助這alows例如:RETURNURL = google.comsometingbad.com到目前爲止,我有這個代碼的RewriteCond%{QUERY_STRING}(RETURNURL | [&] RETURNURL)! =(HTTP | HTTPS)://(例1(\ .COM | \ .COM \ .AU)[/] |示例2(\ .COM | \ .COM \ .AU)[/] | [A-ZA -Z0-9] + []例1(\ COM | \ .COM \ .AU)。[/] | [A-ZA-Z0-9] + []前ample2(\ COM。| \ .COM \ .AU)[/] | [] [] [A-ZA-Z0-9] + [A-ZA-Z0-9] + exmaple2(\ COM | \ .COM \ .AU)[/ ])[&] {0,1}這會停止「.com.au」和「.com」之後的任何字符串,但必須有[/]。我不知道該怎麼說[/ | ]。您的幫助非常感謝 – user1481745

+0

這可能會完成這項工作。 (\ .com $ | \ .com \ .au $ | \ .com/| \ .com \ .au /) – user1481745