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.
Hatalı
Bölüm başlığı “Hatalı”<?phpfunction deleteUser(User $actor, int $targetId): void{ assert($actor->isAdmin()); // production'da atlanır → herkes silebilir Db::delete('users', $targetId);}<?phpfunction deleteUser(User $actor, int $targetId): void{ if (!$actor->isAdmin()) { throw new AccessDeniedException(); } Db::delete('users', $targetId);}Düzeltme
Bölüm başlığı “Düzeltme”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.