簡體   English   中英

Django LDAP3 安全與 TLS:我安全嗎?

[英]Django LDAP3 security with TLS: am I secure?

我擔心在我的 Django 應用程序中使用 LDAP 登錄不安全。 在嘗試了幾種方法之后,我能夠使用ldap3獲得一個有效的自定義后端。 我的組織中的其他程序員(不幸的是非 Django 程序員)建議我使用 TLS,但是當我與 ldap3 建立連接時,它看起來好像沒有使用 TLS。 我是 LDAP 和安全性的新手,但我已經嘗試盡可能多地閱讀,所以希望我不會遺漏一些明顯的東西。

根據 ldap3 文檔和反復試驗,似乎必須先綁定連接( conn.bind() ),然后才能啟動 TLS ( conn.start_tls() )。 這是真的? 如果連接在沒有 TLS 的情況下綁定,這是否暴露了漏洞? 如果是這樣,連接后啟動 TLS 的意義何在?

我是否正確使用了 ldap3 和 TLS? 這種登錄方法不安全,會暴露密碼嗎?

#backends.py

import ldap3
import ssl

class LDAPBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None):
        server = ldap3.Server('ldap://<url>', use_ssl=True)
        conn = ldap3.Connection(server, user=request.POST.get('username'), password=request.POST.get('password'))

        try:
            conn.bind()
            conn.start_tls()
            search_filter = '(&(objectClass=user)(userPrincipalName='+request.POST.get('username')+'))'
            conn.search(search_base='<search terms>', search_filter=search_filter, search_scope='SUBTREE', attributes='*')
            attrs = conn.response[0]['attributes']
            username = attrs['userPrincipalName']

        except:
            return None

如果我切換conn.bind()conn.start_tls()順序(因此 TLS 首先啟動),登錄失敗(表單顯示“輸入正確的用戶名...”)。

在 Django 應用程序中以這種方式登錄是否安全?

我們使用 LDAP 與我們組織中的旗艦 Django 網站進行身份驗證,使用 TLS 證書。 目前尚不清楚您是否是,因為您的目的地 URL 似乎是ldap://而不是ldaps:// 通常,非安全 LDAP 在端口389上運行,而安全 LDAPS 在端口636上運行。

有了這個背景,我強烈建議使用django-python3-ldap package,我們已經使用了幾年,在 LDAP 中有超過 200,000 名用戶使用 objectClasses top、account 和 posixAccount。 你可以在這里找到它: https://github.com/etianen/django-python3-ldap

LDAP 是一個復雜的協議,並且有很多地方可以 go 錯誤地編寫后端(相信我,我嘗試了你要走的路徑)。 django-python3-ldap package 經過實戰考驗,將避免這些陷阱。 您的同事可能會幫助您進行適當的設置以使其正常工作。 祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM