好的,我的快递安装有一个非常奇怪的问题..当我尝试登录时,我需要用户名和密码,对吗?除了我可以使用任何字符串作为密码,它的前缀与我的密码相同。示例:
假设这是我的密码:
#password#我可以使用以下任一密码成功登录:
#password#
#password#FOO
#password#BAR等等。
我使用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哪里会有问题呢?提前感谢您的帮助
发布于 2013-01-19 05:37:58
问题是密码是使用操作系统的crypt()函数加密的,该函数只查看密码的前8个字符来生成加密的散列。
正如here所解释的那样
如果您的密码长度超过8个字符,则只要前8个字符匹配,crypt()就会将其称为有效匹配。例如,如果您的密码是“password”,并且以加密哈希的形式存储在htpasswd文件中,那么对“passwordX”的检查将与对“password”、“password123”等的检查完全相同;也就是说,由于前8个字符完全匹配,因此它将作为有效的检查返回。类似地,如果您的密码是“only password”,并且您只检查了“longpass”,那么它也将作为有效返回。
https://stackoverflow.com/questions/14129699
复制相似问题