计时攻击是如何工作的以及为什么 Symfony 的字符串实用程序建议在传递字符串时采用精确的顺序进行比较

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

要将哈希密码与用户提供的密码进行比较,可以使用 Symfony 提供的实用程序 StringUtil

文档谈到 "timing attacks":攻击者可能会获得有关密码复杂性的有用信息,观察网站将提供的密码与其存储的密码进行比较所需的时间。

那个documentation says还有那个

To avoid timing attacks, the known string must be the first argument and the user-entered string the second.

为什么顺序很重要?

基于the current version of StringUtils,其实无所谓。重要的是正确的顺序,例如password_verify()

文档很可能指的是 2014 and earlier version of StringUtils, which tried to avoid leaking the string length. During the discussion to harden this class against mbstring.func_overload configuration,因此决定泄漏长度是不可避免的,字符串长度通常为 public(即对于 MAC),并且它是通常最好专注于阻止有用信息的泄漏。

在那种情况下,顺序曾经很重要,但现在真的不重要了。

我称之为过时的文档问题。我opened a ticked in symfony-docs更正一下