1

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アプリでこの方法でログインするのは安全ですか?

4

1 に答える 1