为了将散列密码与用户提供的密码进行比较,Symfony提供了util StringUtil
。
文档提到了"定时攻击":攻击者可能有关于密码复杂性的有用信息,观察网站将提供的密码与它存储的密码进行比较所需的时间。
文档还说
为避免定时攻击,已知字符串必须是第一个参数第二个是用户输入的字符串
为什么顺序很重要?
基于StringUtils
的当前版本,这实际上并不重要。重要的是正确的顺序,例如password_verify()
。
该文档可能指的是2014年和更早版本的StringUtils
,它试图避免泄漏字符串长度。在讨论中加强这个类对mbstring的防御。func_overload配置时,决定泄漏长度是不可避免的,字符串长度通常是公开的(即对于MAC),通常最好集中精力阻止有用信息的泄漏。
在这种情况下,顺序过去很重要,但现在真的不重要了。
我认为这是过时的文档问题。我在symfony-docs中打开了一个标记来更正它