Django的密码重设表单使用不区分大小写的查询来检索与请求密码重设的电子邮件地址匹配的帐户。因为这通常涉及显式或隐式大小写转换,所以知道与用户帐户关联的电子邮件地址的攻击者可以制作与该帐户关联的地址不同的电子邮件地址,但是由于Unicode大小写转换的行为-在大小写转换后不再是唯一的,否则它将在给定的数据库大小写转换或排序规则行为之间进行比较。在这种情况下,攻击者可以收到用户帐户的有效密码重置令牌。
为了解决这个问题,Django中进行了两项更改:
1. 从数据库中检索出可能匹配的帐户列表之后,Django的密码重置功能现在还使用[Unicode技术报告36中第2.11.2节](https://www.unicode.org/reports/tr36/#Recommendations_General)中建议的标识符比较过程来检查Python中电子邮件地址的等效性
2. 现在,当生成密码重置电子邮件时,Django将发送到从数据库中检索到的电子邮件地址,而不是发送到密码重置请求表单中提交的电子邮件地址。
全部评论 (1)