1

好的,所以我的快递安装有一个非常奇怪的问题。当我尝试登录时,我需要用户名和密码,对吗?除了我可以使用任何字符串作为密码,它的前缀与我的密码相同。例子:

假设这是我的密码:

#password#

我可以使用以下任何密码成功登录:

#password#
#password#FOO
#password#BAR

ETC..

我正在使用 mysql 存储用户数据,这是我的 /etc/courier/authmysqlrc

MYSQL_SERVER localhost
MYSQL_USERNAME #USER
MYSQL_PASSWORD #PASSWORD
MYSQL_PORT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD password
#MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/home/vmail"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
#MYSQL_NAME_FIELD
MYSQL_QUOTA_FIELD quota

哪里可能有问题?在此先感谢您的帮助

4

1 回答 1

2

问题是密码是使用操作系统的crypt()函数加密的,它只查看密码的前 8 个字符来生成加密的哈希值。如此处
所述:

如果您的密码长度超过 8 个字符,只要前 8 个字符匹配,crypt() 就会称其为有效匹配。例如,如果您的密码是“password”,并且作为加密哈希存储在 htpasswd 文件中,则检查“passwordX”将与检查“password”、“password123”等完全相同;也就是说,它将作为有效检查返回,因为前 8 个字符匹配正确。同样,如果您的密码是“longpassword”并且您只检查“longpass”,那么它也将被返回为有效密码。

于 2013-01-18T21:37:58.183 回答