為Web網站添加IP過濾功能實踐總結(C#)

來源:互聯網
上載者:User

         這項任務是從米老師(米新江的部落格)那裡接手的。目的是給考試系統加上限制,在區域網路內,防止同學從考試以外的地點登入。

         過濾IP聽起來比較容易,最終的效果就是驗證一下IP,再決定是否有許可權訪問考試系統。但是要做的好就不那麼容易了。接下來總結一下開發曆程。


         一、工程根基:資料庫設計。


         設計工程首先要從需求開始,需求出介面,介面出資料庫。由於需求比較簡單,我直接設計了資料庫。

         設計資料庫的時候,考慮到IP過濾相當於防火牆,和手機上來電防火牆很相似,順便取其精華了。在IP過濾中,加上規則功能,有三個預定義的規則:不使用、只攔截黑名單、只允許白名單。經過數次的設計改進,最終資料庫結構如下:

         簡要說明一下設計思路:

        
當前規則表
用來存放正在使用的規則,根據規則不同,進行不同的驗證,讀不同的表(黑名單表或者白名單表)

        
黑名單表、白名單表
用來存放被禁止的IP、被允許的IP,僅僅放一個IP。同時支援IP段過濾,比如192.167.25.*。

        
IP-MAC對應資訊表
相當於資訊庫,當某個IP通過了黑白名單的驗證,還要檢查IP和MAC是否對應,因為很可能有人修改了IP來偽造,但這時IP和MAC就不再對應。

最後說明一下,一般要IP和MAC同時驗證,如果只驗證IP,太不安全,區域網路內非常容易偽造。如果是外網,只驗證IP就夠了,外網的IP是唯一的。


        
二、代碼工之路:嘗試Web擷取訪問者IP、MAC。


         在沒有查閱相應技術之前,就隱隱感覺到這是一項艱巨的任務,因為MAC資訊非常敏感。果然,經過調查,發現在Web端擷取訪問者的IP很容易,但是擷取MAC就幾乎是幻想,因為它太敏感了。

         擷取用戶端MAC共有三種方法(只做概述):

         l  通過ActiveX控制項擷取。缺點:只相容IE瀏覽器,而且要把IE瀏覽器的安全性設定的很低,先別說使用者是否同意,微軟第一個不同意,瘋狂的彈出安全警告。優點:速度快,結果準確可靠,內網、外網通用。

         l  通過調用WindowsAPI基於ARP發包原理擷取。缺點:只能在區域網路內使用,外網無效。就算是區域網路,網段還要一樣,否則擷取不到。優點:速度快,與瀏覽器無關,相容性好。

         l  通過調用CMD命令擷取。缺點:速度及其慢,慢的像網頁假死一樣,而且結果不太可靠。優點:瀏覽器無關,相容性好,而且內網、外網均可以使用。

說明一下,以上所有方法都是針對javascript說的,因為只有它是運行在用戶端的。可以看出,以上每種方法的缺點都是致命的,經過分析思考,最終放棄了使用Web擷取訪問者的IP資訊。


         三、代碼工之路:用用戶端擷取訪問者IP、MAC。


         通過徵求米老師的意見,最終決定用用戶端擷取訪問者IP、MAC。也就是說,使用者想使用考試系統,必須先下載安裝用戶端。這樣設計一來可以很方便的擷取訪問者的IP和MAC,二來可以讓我們更加主動,能更好的控制使用者。

         核心問題:

         這樣做又引出一個新問題:安全問題。由於資訊是由用戶端擷取,然後以參數的形式傳遞給Web網站,這樣很可能被手動偽造。

首先想到的解決方案是對傳遞的參數進行加密,加密以後由於外人不知道密碼編譯演算法,無法對參數進行修改、構造。

         本來以為這樣就可以了,過了幾天,才突然意識到這樣是不行的。假如A電腦允許訪問網站,而B電腦不允許訪問,那麼A電腦上的用戶端構造的參數是一個有效參數,B電腦上的用戶端構造的參數是無效參數。如果有人截獲了A電腦上的有效參數,手動複製到B電腦上,那麼B電腦憑藉有效參數可以成功登入系統,我們完全不知道被欺騙了。以上的參數,都是經過加密的,無論怎麼加密,都是徒勞的。

         這個問題的中心是如何區分傳遞給Web網站的參數是用戶端構造的,還是手動偽造的。答案是:無法區分!

         既然無法區分,可以換另外一個角度。受到網盤的啟發,可以給用戶端構造的參數加上一個時效。在用戶端產生參數時,加入一個有效期間,假設是2秒,Web網站接受參數時,判斷是否到期。參數是加密的,因此外界無法修改參數有效期間,除非他知道密碼編譯演算法。

         這樣一來,手動偽造幾乎不可能,因為參數的有效期間僅僅2秒,參數構造、傳遞、接受、有效期間判斷等過程基本上就把2秒消耗的差不多了,即使是複製到別處,那時候早就失效了。

        
Web端職責:

         為了使程式盡量靈活,Web端有如下職責:

         l  提供規則、黑名單、白名單管理頁面,也就是整個IP過濾系統的後台控制。

         l  提供出錯頁面。諸如:未安裝用戶端、禁止該IP訪問、參數異常等錯誤提示,靈活的顯示在出錯頁面上,並且根據錯誤類型不同,來顯示或隱藏用戶端下載提示。

         l  提供IP掃描介面。受到深信服網路監控的啟發,提供掃描模式,只要電腦安裝了用戶端,即可向用戶端發送命令,讓用戶端訪問掃描介面,自動添加電腦IP-MAC對應資訊到資料庫中,如果存在,則修改,不存在則添加,無需手動幹預。

         l  提供伺服器時間介面。用戶端構造參數的有效期間,必須依賴於伺服器時間。

         l  提供用戶端參數介面。用戶端幾乎所有的參數都是從伺服器擷取的,這樣可以更加靈活的控制用戶端,以後有什麼改動,完全不用修改用戶端,達到一次編譯,永久運行。

        
用戶端職責:

         l  從伺服器擷取配置資訊。

         l  監視瀏覽器網址。

         l  擷取訪問者IP、MAC,構造參數。

         簡單的說,用戶端就是按照伺服器的意願辦事。

 

         至此,一個IP過濾功能就完成了。這裡總結的僅僅是理論,代碼就不貼了。希望大家多多和我交流,互相促進。

         最後感謝米老師的大愛!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.