İçeriğe geç

Yetki Kontrolünde assert Kullanımı (ARCH7133)

Anahtar php.security.assert-for-auth-control · Önem warning · Kategori security · CWE CWE-617

assert() çağrıları zend.assertions=-1 ile production’da derlenmeden atlanır. Güvenlik kararını assert’e dayandırmak, kontrolün üretimde tamamen yok sayılması demektir ve yetki bypass’ına yol açar.

<?php
function deleteUser(User $actor, int $targetId): void
{
assert($actor->isAdmin()); // production'da atlanır → herkes silebilir
Db::delete('users', $targetId);
}
<?php
function deleteUser(User $actor, int $targetId): void
{
if (!$actor->isAdmin()) {
throw new AccessDeniedException();
}
Db::delete('users', $targetId);
}

Yetki kararlarını her zaman çalışan açık if/exception kontrolüyle uygulayın; assert yalnızca geliştirme zamanı sağlık kontrolleri içindir.