如何修复 tsr-detect-possible-timing-attacks 潜在的定时攻击

dag*_*da1 0 javascript typescript tslint

我有这样的代码:

if (!confirmPassword) {
  errors.confirmPassword = DefaultValidateErrors.confirmPassword;
} else if (password && password !== confirmPassword) {
  errors.confirmPassword = DefaultValidateErrors.confirmPasswordMatch;
}
Run Code Online (Sandbox Code Playgroud)

tslint 已将此标记为 tsr-detect-possible-timing-attacks,这听起来是正确的,但我该如何解决。

小智 7

如果您使用的是 Node 且版本 v6.6.0+,那么您可以使用该crypto模块的timingSafeEqual.

const crypto = require('crypto');
const isValid = crypto.timingSafeEqual(Buffer.from(password), Buffer.from(confirmPassword));
Run Code Online (Sandbox Code Playgroud)

节点加密文档


Mat*_*hen 5

我认为这是一个误报,您可以抑制 lint 警告。lint 规则查找任何名为 的变量password,但定时攻击仅在涉及客户端未知的数据时才相关,例如,当检查客户端指定的密码时,尝试根据保存的正确密码登录。看起来这段代码只是在验证由经过身份验证的用户设置的新密码。

也就是说,为了在相关时避免计时攻击,网络搜索找到了规则文档,该文档链接到一个帖子,其中提供了使用按位运算在恒定时间内比较两个密码的建议解决方案。(你会认为这个功能会在某个地方的图书馆里。也许是。)