网络应用程序安全指南/比较问题
外观
比较值时,请了解您的编程语言的行为。例如,在 PHP 中,"==
" 是一个宽松的比较,它忽略类型,并可能导致意外行为。 "===
" 用于精确比较。使用错误类型的比较会导致安全问题。
为了防止比较问题
- 了解编程语言中的比较类型,并使用正确的类型
- 如有疑问(尤其是在 PHP 中),请使用严格比较(PHP: "
===
") - 比较字符串是否相等时,请确保您实际检查的是字符串是否相等,而不是一个字符串是否包含另一个字符串
基本原理
使用过于宽松的比较很容易导致安全问题。例如,在 PHP 中,以下将被评估为 TRUE
"a97e8342f0" == 0
十六进制字符串,它可能是令牌或哈希值,会自动被解析为整数,并且由于它以字母开头,因此无法解析,结果为 0。
意外地检查字符串是否包含,而不是检查字符串是否相等,这可能允许攻击者绕过例如白名单检查。