Django中介軟體之實現Admin後臺IP白名單
阿新 • • 發佈:2020-08-06
Django自帶的Admin管理後臺很方便,但是實際生產環境真的會有挺多安全問題的,在admin的安全防護這方面,我之前就研究實現了給admin加上登入驗證碼和限流功能,可以參考這篇文章:
不過就在內部使用的話就好很多,因此我們可以通過Django的中介軟體來實現IP過濾,所以本文中涉及到兩個知識點,一個是Django的中介軟體,另外一個是Python關於IP這種資料結構的處理。
開始進入正題吧~
Django中介軟體
關於中介軟體的概念和使用不是本文的重點,請讀者自行參閱官方文件,寫得很清楚易懂。
首先我們新建一個Python包:middleware
,建立一個Python檔案admin_secure.py
import ipaddress from django.conf import settings from django.http.response import HttpResponseForbidden class AdminSecureMiddleware(object): """ Admin 安全中介軟體 用於限制可訪問 admin 管理後臺的IP段 """ admin_url = f'/{settings.URL_PREFIX}admin' allow_networks = [ ipaddress.ip_network('10.53.0.0/20'), ] allow_addresses = [] @classmethod def get_allow_addresses(cls): if len(cls.allow_addresses) > 0: return cls.allow_addresses for network in cls.allow_networks: for ip in network: cls.allow_addresses.append(ip) return cls.allow_addresses def __init__(self, get_response): self.get_response = get_response def __call__(self, request): response = self.get_response(request) ip_addr = ipaddress.ip_address(request.META.get('REMOTE_ADDR')) if request.path.startswith(self.admin_url): if ip_addr not in self.get_allow_addresses(): return HttpResponseForbidden() return response
注意上述程式碼,可以在allow_networks
中新增執行的IP網段,然後在settings.py
中啟用這個中介軟體就可以了。
這裡又引出了本文涉及的第二個知識點,就是Python的ipaddress操作。
ipaddress模組
我突然想偷懶一波,哈哈哈哈哈哈~
因為這塊真的挺簡單的,官網文件是:https://docs.python.org/zh-cn/3/howto/ipaddress.html
大學的計算機網路知識還沒還給老師吧(逃~)
參考資料
歡迎交流
我整理了一系列的技術文章和資料,在公眾號「程式設計實驗室」後臺回覆 linux、flutter、c#、netcore、android、kotlin、java、python 等可獲取相關技術文章和資料,同時有任何問題都可以在公眾號後臺留言~