Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django LDAP登录上应用哈希SHA256?_Python_Django_Apache_Authentication_Django Auth Ldap - Fatal编程技术网

Python 如何在Django LDAP登录上应用哈希SHA256?

Python 如何在Django LDAP登录上应用哈希SHA256?,python,django,apache,authentication,django-auth-ldap,Python,Django,Apache,Authentication,Django Auth Ldap,我在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中使用
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;博士:这个问题是基于一个误解。客户端哈希不会提高安全性,因此不受支持

如果客户端对密码进行散列,则散列将扮演密码的角色:拦截流量的人可以看到散列,然后使用它进行身份验证

这就是客户端不散列密码的主要原因。为了在传输过程中保护您的密码,请使用TLS(但您似乎已经拥有了TLS)


更一般地说,密码是由一方选择的对称密钥(注册帐户时通常由客户端选择)。当使用这种类型的机密进行身份验证时,无法避免在某个点传输它。绕开这些障碍的唯一方法是:

  • 不要让任何一方选择秘密;相反,就一个秘密达成一致。这称为“密钥交换”。一个众所周知的方法是。在这种情况下,密钥本身永远不会被传输,尽管双方都知道它。(但是,请注意,这无助于身份验证,因为它不会告诉您与谁就密钥达成一致;它只帮助建立一次性会话加密密钥。)
  • 不要使用对称密钥,而是使用由私钥和公钥组成的密钥对。然后,您可以在不影响安全性的情况下传输公钥,并采用另一种身份验证方案(例如,服务器可以要求客户端签署质询;如果成功,服务器可以推断客户端拥有私钥,而不要求服务器拥有私钥)
  • 如您所见,这两种方法都增加了很多额外的复杂性,而且它们通常都不适合直接的最终用户身份验证

    类似地,客户端哈希也增加了比乍一看要复杂得多的复杂性。开放性问题包括,例如,使用哪种salt、如何传输salt等。同样,即使回答了这些问题并实现了一些复杂的解决方案,传输的哈希仍然允许中间人攻击者通过简单地重用哈希来模拟客户端


    总而言之,客户端哈希不是一种安全改进,避免对称秘密(双方都知道)或避免秘密传输的替代方案也不能解决问题。因此,最先进的解决方案是将用户密码实际传输到服务器,并封装在TLS连接中。

    如何将此应用于Django后端?我没有在代码中的任何地方显式访问密码。我实际上在寻找,我)是否有任何设置将哈希算法指向
    django\u auth\u ldap
    ?如果没有,是否有任何解决方法?@shaikmoeed添加到您的视图文件或第一次创建用户的代码部分,或将用户添加到database@DamilolaBoiyelove如果我没有错的话,目前,默认密码哈希器正在工作,服务器端也是如此。要在fiddler中可见,我们需要进行客户端哈希吗?如何在Django中实现它(客户端SHA256)以提高安全性?您使用的是GET方法还是POST?@DamilolaBoiyelove-POST方法