我有这样的代码:
if (!confirmPassword) {
errors.confirmPassword = DefaultValidateErrors.confirmPassword;
} else if (password && password !== confirmPassword) {
errors.confirmPassword = DefaultValidateErrors.confirmPasswordMatch;
}
tslint已将其标记为tsr-detect-possible-timing-attacks,听起来不错,但是我该如何解决。
答案 0 :(得分:1)
如果您使用的节点版本为v6.6.0 +,则可以使用crypto
模块的timingSafeEqual
。
const crypto = require('crypto');
const isValid = crypto.timingSafeEqual(Buffer.from(password), Buffer.from(confirmPassword));
答案 1 :(得分:0)
我认为这是一个误报,您可以取消掉毛警告。 lint规则寻找any variable named password
,但是定时攻击仅在涉及客户端未知的数据时才有意义,例如,在检查客户端尝试使用保存的正确密码登录时指定的密码时。看起来这段代码只是在验证由经过身份验证的用户设置的新密码。
也就是说,为了避免定时攻击相关,web search找到了我the rule documentation,该用户链接到a post并提出了一种建议的解决方案,该解决方案可以使用位方式在恒定时间内比较两个密码操作。 (您可能会认为功能应该在某个地方的库中。也许是。)