PHP Conference Nagoya 2025

hash_equals

(PHP 5 >= 5.6.0, PHP 7, PHP 8)

hash_equalsZamanlama saldırısı güvenli dize karşılaştırması

Açıklama

hash_equals(#[\SensitiveParameter] string $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.

Dikkat

Kullanıcı tarafından sağlanan dizgenin birinci yerine ikinci bağımsız değişken olarak belirtilmesi önemlidir.

Bağımsız Değişkenler

bilinen_dzg

Gizli tutulması gereken dizge.

kullanıcı_dzg

Karşılaştıma için kullanıcının sağladığı dizge.

Dönen Değerler

İki dizge benzerse true yoksa false döner.

Örnekler

Ö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ış.

Notlar

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.

Ayrıca Bakınız

  • hash_hmac() - HMAC yöntemini kullanarak bir anahtarlı ileti aşı üretir

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top