hash_equals

函数
hash_equals ( $known_string, $user_string )
参数
  • (string) $known_string Expected string.
    Required:
  • (string) $user_string Actual, user supplied, string.
    Required:
返回值
  • (bool) Whether strings are equal.
定义位置
相关方法
has_metahas_blockshas_taghas_termis_email
引入
3.9.2
弃用
-

hash_equals – 这是一个PHP函数,以抵抗定时攻击的方式对两个字符串进行比较。计时攻击是一种安全漏洞,在比较敏感信息,如密码或认证令牌时可能发生。hash_equals函数需要两个参数:第一个要比较的字符串和第二个要比较的字符串。如果字符串相等,它返回真,如果不相等,则返回假。

计时攻击安全的字符串比较。

使用相同的时间比较两个字符串,无论它们是否相等。

注意:当提供不同长度的参数时,它可能泄露字符串的长度。

该函数在 PHP 5.6 中被添加。然而,Hash 扩展可能在选定的服务器上被明确禁用。从 PHP 7.4.0 开始,Hash 扩展是一个核心的 PHP 扩展,不能再禁用。
不能再被禁用。也就是说,当 PHP 7.4.0 成为最低要求时,这个 polyfill 可以被安全地移除。

function hash_equals( $known_string, $user_string ) {
		$known_string_length = strlen( $known_string );

		if ( strlen( $user_string ) !== $known_string_length ) {
			return false;
		}

		$result = 0;

		// Do not attempt to "optimize" this.
		for ( $i = 0; $i < $known_string_length; $i++ ) {
			$result |= ord( $known_string[ $i ] ) ^ ord( $user_string[ $i ] );
		}

		return 0 === $result;
	}
endif;

// random_int() was introduced in PHP 7.0.
if ( ! function_exists( 'random_int' ) ) {
	require ABSPATH . WPINC . '/random_compat/random.php';
}

常见问题

FAQs
查看更多 >