计时攻击是如何工作的,以及为什么Symfony's字符串utils在传递字符串进行比较时建议一个精确的顺序


How do the timing attacks works and why Symfony's string utils suggest a precise order in passing strings to compare

为了将散列密码与用户提供的密码进行比较,Symfony提供了util StringUtil

文档提到了"定时攻击":攻击者可能有关于密码复杂性的有用信息,观察网站将提供的密码与它存储的密码进行比较所需的时间。

文档还说

为避免定时攻击,已知字符串必须是第一个参数第二个是用户输入的字符串

为什么顺序很重要?

基于StringUtils的当前版本,这实际上并不重要。重要的是正确的顺序,例如password_verify()

该文档可能指的是2014年和更早版本的StringUtils,它试图避免泄漏字符串长度。在讨论中加强这个类对mbstring的防御。func_overload配置时,决定泄漏长度是不可避免的,字符串长度通常是公开的(即对于MAC),通常最好集中精力阻止有用信息的泄漏。

在这种情况下,顺序过去很重要,但现在真的不重要了。

我认为这是过时的文档问题。我在symfony-docs中打开了一个标记来更正它