[英]How to apply hashing SHA256 on Django LDAP login?
我在 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 = "xxxxx@xxxx.com"
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"
}
但是,我的凭据以纯文本形式传输。
来自提琴手:
存储在数据库中的密码:
!Qoc6uEP5h0lOXIeqmSov1HWOL8eY4fmlpJ1Z3q
如何应用散列SHA256?
注:本站部署于Apache2.4,Windows server 2008 r2。
如果您需要哈希密码,请尝试以下操作:
import hashlib
HashedPassword =hashlib.sha1('PASSWORD'.encode('UTF-8'))
tl;dr:这个问题是基于一个误解。 客户端哈希不提高安全性,因此不支持。
如果客户端对密码进行散列,散列将扮演密码的角色:拦截流量的人可以看到散列,并在以后使用它进行身份验证。
这是客户端不散列密码的主要原因。 为了在传输过程中保护您的密码,请使用 TLS(但您似乎已经拥有了)。
更一般地说,密码是由一方(通常是客户端,在注册帐户时)选择的对称密钥。 使用这种类型的机密进行身份验证时,无法避免在某些时候传输它。 解决这个问题的唯一方法是:
如您所见,这两种方法都增加了很多额外的复杂性,而且它们通常都不适合直接最终用户身份验证。
同样,客户端散列也增加了比乍一看更复杂的复杂性。 开放性问题包括,例如,使用哪种盐,如何传输盐等。 同样,即使回答了这些问题并实施了一些复杂的解决方案,传输的哈希值仍然会允许中间人攻击者通过简单地重用散列来模拟客户端。
总而言之,客户端散列不是安全改进,避免对称秘密(双方都知道)或避免秘密传输的替代方案也不能解决问题。 因此,最先进的解决方案是将用户的密码实际传输到服务器,并封装在 TLS 连接中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.