使用 Python對(duì)接快遞單號(hào)識(shí)別查詢api接口查詢物流信息
878
2025-04-03
擁有越大權(quán)限,往往也就責(zé)任也越大。Django Admin 在擁有修改權(quán)限的同時(shí)應(yīng)該要更加注意安全。
本文提供了 5 種方法來保護(hù) Django Admin 避免來自認(rèn)為的錯(cuò)誤或者攻擊者的攻擊。
改變 URL
每種框架都有自己的特殊標(biāo)識(shí),Django 也不例外。經(jīng)驗(yàn)豐富的開發(fā)者、黑客、用戶都可以通過查看 Cookie 和 Auth URL 來識(shí)別 Django Admin 的站點(diǎn)。
一旦網(wǎng)站被識(shí)別出是 Django 構(gòu)建的,攻擊者很有可能嘗試從?/admin?登錄。
為了增加獲取訪問權(quán)限的難度,推薦把 URL 改成更難猜到的地址。
在 url.py 中修改 admin 的 URL 地址。
urlpatterns?+=?i18n_patterns( ????url(r’^super-secret/’,?admin.site.urls,?name=’admin’), )
把?super-secert?修改成你和你團(tuán)隊(duì)可以記住的地址。這就完成了第一步,雖然不是唯一的防御措施,但是確實(shí)一個(gè)好的開始。
從視覺上區(qū)分環(huán)境
用戶和管理員不可避免的會(huì)犯錯(cuò)誤。當(dāng)有多種環(huán)境時(shí)候可以避免管理員在正式的環(huán)境中執(zhí)行破壞性的操作,你可以有 development、QA、staging、production 等多種不同的環(huán)境。
為了減少發(fā)生錯(cuò)誤的機(jī)會(huì),可以在 admin 中清楚的顯示不同的環(huán)境。
首先你需要知道當(dāng)前的環(huán)境是什么。可以在部署期間使用一個(gè)名為?ENVIRONMENT_NAME?的環(huán)境變量。再添加一個(gè)?ENVIRONMENT_COLOR?的環(huán)境變量來區(qū)分顏色。
將以上兩個(gè)環(huán)境變量添加到 admin 的每個(gè)頁(yè)面中,覆蓋原先的基本模板。
#?app/templates/admin/base_site.html{%?extends?"admin/base_site.html"?%} {%?block?extrastyle?%} {%?endblock?%}
從?settings.py?中獲取?ENVIRONMENT?變量,在模板的上下文處理中使用它們。
#?app/context_processors.pyfrom?django.conf?import?settingsdef?from_settings(request): ????return?{????????'ENVIRONMENT_NAME':?settings.ENVIRONMENT_NAME,????????'ENVIRONMENT_COLOR':?settings.ENVIRONMENT_COLOR, ????}
在?settings.py?中注冊(cè)上下文處理器。
TEMPLATES?=?[{ ????…????'OPTIONS':?{????????'context_processors':?[ ????????????…????????????'app.context_processors.from_settings', ????????], ????… ????}, }]
現(xiàn)在打開 Django admin 時(shí),應(yīng)該可以看到頂部的指示器。
命名 admin 站點(diǎn)
如果擁有多個(gè) Django 服務(wù),admin 看起來全部是一樣的,這很容易導(dǎo)致困惑。為了區(qū)分不同的 admin 可以修改標(biāo)題:
#?urls.pyfrom?django.contrib?import?admin admin.site.site_header?=?‘Awesome?Inc.?Administration’ admin.site.site_title?=?‘Awesome?Inc.?Administration’
你會(huì)看到如下內(nèi)容:
更多的配置可以在?文檔?中查找。
從主站從分離 Django Admin
使用相同的代碼,可以部署 Django 應(yīng)用程序的兩個(gè)實(shí)例,一個(gè)僅用于 admin,一個(gè)僅適用于其余的應(yīng)用程序。
這個(gè)是有爭(zhēng)議的,不像提示那樣容易。實(shí)現(xiàn)往往取決于配置(例如,使用 gunicorn 或者 uwsgi),所以不做詳細(xì)的介紹。
以下可能是想把 Django admin 分離出來的原因:
在 VPN(virtual private network)中部署 Django admin?—— 如果 admin 僅在內(nèi)部使用,同時(shí)擁有 VPN,這會(huì)是一種很好的做法。
從主站中刪除不必要的組件?—— 例如,在 Django admin 中使用了消息框架,但是在主站中沒有使用。你可刪除這個(gè)中間件。另一個(gè)認(rèn)證的例子是,如果主站使用的基于 token 的認(rèn)證 API 后端,則可以刪除大量的模板配置,session 的 middleware 等,也可以刪除從請(qǐng)求到響應(yīng)中不必要的部分。
更強(qiáng)大的身份認(rèn)證?—— 如果要加強(qiáng) Django admin 安全性,可能會(huì)需要添加不同的身份認(rèn)證機(jī)制。在不同的實(shí)例下使用不用配置會(huì)更加容易。
把 admin 從主站從分離出來,不干擾內(nèi)部應(yīng)用程序。把 admin 摻雜在其中只會(huì)是的部署更加復(fù)雜,對(duì)加強(qiáng)安全性沒有好處。
添加雙重方式認(rèn)證(2FA)
雙重方式認(rèn)證現(xiàn)在非常受歡迎,很多網(wǎng)站開始使用這種選項(xiàng)。2FA 基于兩種方式認(rèn)證:
你知道什么?—— 通常是一個(gè)密碼。
你有什么?—— 通常是移動(dòng)應(yīng)用程序每 30 秒生成一個(gè)隨機(jī)數(shù)(如 Google 的 Authenticator)。
第一次注冊(cè)時(shí)候通常會(huì)要求使用身份認(rèn)證應(yīng)用程序掃描某種條碼,完成注冊(cè)后會(huì)生成一次性的代碼。
通常不推薦使用第三方包,但是在幾個(gè)月前開始使用?django-otp?在 admin 中實(shí)現(xiàn)了 2FA。它在 Bitbucket 上托管,所以你可能錯(cuò)過了。
我們可以很方便的使用:
pip?install?django-otp pip?install?qrcode
將 django-otp 添加到已安裝的應(yīng)用程序和中間件中:
#?settings.pyINSTALLED_APPS?=?( ???... ???‘django_otp’, ???‘django_otp.plugins.otp_totp’, ???... ) ... MIDDLEWARE?=?( ???... ???‘django.contrib.auth.middleware.AuthenticationMiddleware’, ???‘django_otp.middleware.OTPMiddleware’, ???... )
命名發(fā)行人 - 這是用戶在認(rèn)證時(shí)候看到的名稱,可以通過這個(gè)區(qū)分。
#?settings.pyOTP_TOTP_ISSUER?=?‘Awesome?Inc.’
將 2FA 身份驗(yàn)證添加到管理站點(diǎn):
#?urls.pyfrom?django_otp.admin?import?OTPAdminSite admin.site.__class__?=?OTPAdminSite
現(xiàn)在你有如下所示安全的管理頁(yè)面:
需要添加新用戶時(shí),從 Django admin 從創(chuàng)建一個(gè)「TOTP 設(shè)備」。點(diǎn)擊完成 QR 鏈接后,將會(huì)看到如下屏幕:
可以使用用戶的個(gè)人認(rèn)證設(shè)備掃描二維碼,每個(gè) 30 秒回生成一個(gè)新的代碼。
最后的話
構(gòu)建一個(gè)安全的 Django admin 只需要多多注意,文中的一些提示很容易實(shí)現(xiàn),但是還有很多需要去做的。
異步社區(qū)是一個(gè)有料、有貨,又專業(yè)的IT專業(yè)圖書社區(qū),在這里可以讀到最新、最熱的IT類圖書! 我想要社區(qū)的《奔跑吧 Linux內(nèi)核》這本書,這本書把枯燥的內(nèi)核講的通俗易懂還有配套視頻,請(qǐng)大家?guī)臀遥?/p>
Django 安全
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。