我正在Django中使用LDAP
身份验证,如下所示,并且还在使用密码哈希。
from django_auth_ldap.config import PosixGroupType, LDAPSearch
import ldap
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
'django.contrib.auth.hashers.Argon2PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
]
# We use a dedicated user to bind to the LDAP server and execute the server.
AUTH_LDAP_SERVER_URI = "ldap://xx.xx.xx.xx:389"
AUTH_LDAP_BIND_DN = "[email protected]"
AUTH_LDAP_BIND_PASSWORD = "xxxxx"
AUTH_LDAP_CONNECTION_OPTIONS = {
ldap.OPT_DEBUG_LEVEL: 1,
ldap.OPT_REFERRALS: 0,
}
# sAMAccountName is mostly used for Micrsoft Active Directory
# objectCategory CN=Person,CN=Schema,CN=Configuration,DC=corp,DC=xxxx,DC=com
# (cn=%(user)s)
AUTH_LDAP_USER_SEARCH = LDAPSearch("DC=corp,DC=xxxxx,DC=com",
ldap.SCOPE_SUBTREE,
"(&(objectClass=user)(sAMAccountName=%(user)s))")
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
但是,我的凭据以纯文本格式传输。
来自Fiddler:
存储在数据库中的密码:
!Qoc6uEP5h0lOXIeqmSov1HWOL8eY4fmlpJ1Z3q
如何应用散列SHA256?
注意:站点已部署在Windows Server 2008 r2的Apache2.4上。
如果您需要哈希,请输入密码:
import hashlib
HashedPassword =hashlib.sha1('PASSWORD'.encode('UTF-8'))
tl; dr:这个问题是基于一个误解。客户端哈希确实提高了[[not的安全性,因此不受支持。
如果客户端对密码进行散列,则散列将充当密码的角色:拦截流量的人可以看到该散列,并稍后使用它进行身份验证。这是客户端不对密码进行哈希处理的主要原因。为了保护您的密码在传输过程中,请使用TLS(但似乎您已经拥有该密码)。
no way可以避免在某些时候进行传输。解决这个问题的唯一方法是:
总而言之,客户端哈希不是安全性的改进,避免对称机密(双方都知道)或避免机密传输的替代方法也无法解决问题。因此,最新的解决方案是将用户的密码实际发送到服务器,并包装在TLS连接中。]