用途:该资料介绍时序攻击(Timing Attacks)反模式,严重级别为中等。攻击者通过测量操作耗时提取秘密:提前退出的比较会泄露信息,例如将 ABCDEF 与 ABCDEG 比较比与 XBCDEF 比较耗时更长,因为前者在失配前有更多字符匹配。这种时间差可用于逐字符恢复秘密。
反模式:比较函数在发现敏感值(密码、令牌、哈希)差异时提前返回。资料给出的不安全示例中,自定义比较函数在首个不匹配字符处 return False,导致首字符错误时返回快、末字符错误时耗时更长;攻击者据此测量响应时间,token=X 很快、token=a 较慢、token=ab 更慢,从而逐字符推断秘密。
主要能力与安全做法:使用恒定时间比较函数,执行时间只取决于长度而非取值,且始终比较全部字节。资料列出的函数包括 Python 的 hmac.compare_digest() 或 secrets.compare_digest()、Node.js 的 crypto.timingSafeEqual()、Go 的 subtle.ConstantTimeCompare()、Java 的 MessageDigest.isEqual()(字节数组)、PHP 的 hash_equals()。密码校验可使用 bcrypt/argon2 等库提供的时序安全验证(如 bcrypt.checkpw()、argon2.verify())。恒定时间函数可安全处理长度不匹配,但预先检查长度可提高清晰度。
检测方法:审查代码中所有比较敏感值(密码、API 密钥、会话令牌、加密哈希、HMAC 签名)的位置;查找用于比较秘密的 == 或 === 等标准相等运算符,它们通常不是恒定时间;查找自定义比较循环,若逐字符迭代并在首个不匹配时返回 False,则存在漏洞。
适用场景与限制:适用于生成或审查涉及秘密比较的代码,以及 JWT 签名验证、密码哈希验证等场景。相关模式包括弱密码哈希反模式、JWT 误用反模式、填充预言反模式。资料未提供具体安装命令、收费信息或平台限制。