(PHP 5 >= 5.6.0, PHP 7, PHP 8)
hash_equals — Zamanlama saldırısı güvenli dize karşılaştırması
$bilinen_dzg
, #[\SensitiveParameter] string $kullanıcı_dzg
): bool
Yürütme sırasında bilinen_dzg
içeriği hakkında
bilgi sızdırmaksızın iki dizgenin eşit olup olmadığına bakar.
Bu işlev, zamanlama saldırılarını azaltmak için kullanılabilir.
===
ile düzenli karşılaştırma yapmak, iki değerin farklı olup
olmadığına ve ilk farkın hangi konumda bulunabileceğine bağlı olarak daha
fazla veya daha az zaman alacaktır, dolayısıyla
bilinen_dzg
içeriği hakkında bilgi sızdırılacaktır.
Kullanıcı tarafından sağlanan dizgenin birinci yerine ikinci bağımsız değişken olarak belirtilmesi önemlidir.
bilinen_dzg
Gizli tutulması gereken dizge.
kullanıcı_dzg
Karşılaştıma için kullanıcının sağladığı dizge.
Örnek 1 - hash_equals() örneği
<?php
$gizliAnahtar = '8uRhAeH89naXfFXKGOEj';
// Değer ve imzayı kullanıcı örn. URL içinde sağlar ve
// $_GET kullanılarak alınır.
$değer = 'username=rasmuslerdorf';
$imza = '8c35009d3b50caf7f5d2c1e031842e6b7823a1bb781d33c5237cd27b57b5f327';
if (hash_equals(hash_hmac('sha256', $değer, $gizliAnahtar), $signature)) {
echo "Değer doğru imzalanmış.", PHP_EOL;
} else {
echo "Değer tahrif edilmiş.", PHP_EOL;
}
?>
Yukarıdaki örneğin çıktısı:
Değer doğru imzalanmış.
Bilginize:
Başarılı bir karşılaştırma için verilen dizgeler eşit uzunlukta olmalıdır. Uzunluklar farklıysa hemen
false
döner. Zamanlama saldırısı durumunda bilinen dizgenin uzunluğu değişebilir.