İçeriğe geç

NoSQL Enjeksiyonu (ARCH7140)

Anahtar php.security.nosql-injection · Önem error · Kategori security · CWE CWE-943

Kullanıcı girdisini doğrudan bir MongoDB sorgusuna koymak, saldırganın {"$ne": null} gibi operatör nesneleri enjekte ederek kimlik doğrulamayı atlamasına olanak tanır.

<?php
// password=array('$ne' => null) → her parolayla eşleşir
$user = $collection->findOne([
'user' => $_POST['user'],
'password' => $_POST['password'],
]);
<?php
$user = $collection->findOne(['user' => (string) $_POST['user']]);
if ($user && password_verify((string) $_POST['password'], $user['password'])) {
// giriş başarılı
}

Sorgu değerlerini beklenen ilkel tiplere zorlayın (string/int); operatör nesnelerinin kullanıcı girdisinden geçmesine izin vermeyin.