5 種方法構(gòu)建安全的 Django Admin

      網(wǎng)友投稿 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?%} ????body:before?{ ????????display:?block; ????????line-height:?35px; ????????text-align:?center; ????????font-weight:?bold; ????????text-transform:?uppercase; ????????color:?white; ????????content:?"{{?ENVIRONMENT_NAME?}}"; ????????background-color:?{{?ENVIRONMENT_COLOR?}}; ????} {%?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, ????}

      5 種方法構(gòu)建安全的 Django Admin

      在?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)容。

      上一篇:篩選功能怎么用?(excel的高級(jí)篩選功能怎么用)
      下一篇:excel表格只顯示公式的解決方案(excel表格中顯示公式,不顯示公式結(jié)果怎么辦)
      相關(guān)文章
      亚洲国产亚洲综合在线尤物| 久久久久久a亚洲欧洲AV| 91大神亚洲影视在线| 亚洲精品成人无限看| 久久精品亚洲男人的天堂| 亚洲精品岛国片在线观看| mm1313亚洲精品国产| 亚洲成a人片在线观看久| www.亚洲精品.com| 国产一区二区三区亚洲综合| 国产精品亚洲精品日韩动图 | 久久久久久亚洲精品| 亚洲第一精品在线视频| 亚洲AV午夜成人影院老师机影院| 日本红怡院亚洲红怡院最新| 亚洲国产成人片在线观看 | 亚洲一卡2卡3卡4卡5卡6卡| 2017亚洲男人天堂一| 久久亚洲精品国产精品婷婷| 亚洲日本天堂在线| 色偷偷亚洲第一综合网| 日韩亚洲国产二区| 亚洲综合色区在线观看| 亚洲夜夜欢A∨一区二区三区 | 亚洲国产成人一区二区精品区| 亚洲av无码无在线观看红杏| 亚洲丁香色婷婷综合欲色啪| 亚洲黄色网址大全| 久久精品国产99国产精品亚洲| 亚洲乱妇老熟女爽到高潮的片| 亚洲av色香蕉一区二区三区蜜桃| 国产亚洲精品美女久久久久久下载| 亚洲成a人无码av波多野按摩| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲综合区小说区激情区| 亚洲啪啪综合AV一区| 亚洲综合精品一二三区在线| 亚洲国产成人va在线观看网址| 亚洲偷偷自拍高清| 性色av极品无码专区亚洲 | 亚洲女人初试黑人巨高清|