NoSQL Enjeksiyonu (ARCH4140)
Anahtar java.security.nosql-injection · Önem error · Kategori security · CWE CWE-943
Kullanıcı girdisini doğrudan bir NoSQL sorgusuna gömmek (örn. ham JSON ile filtre kurmak), saldırganların operatör enjekte edip ($ne, $gt) kimlik doğrulamayı atlamasına olanak tanır. Sorguyu tipli alanlarla ve operatör değil değer bekleyerek kurun.
Hatalı
Bölüm başlığı “Hatalı”String json = "{ \"user\": \"" + req.getParameter("user") + "\", \"pass\": \"" + req.getParameter("pass") + "\" }";Document filter = Document.parse(json); // {"pass": {"$ne": null}} enjekte edilebilircollection.find(filter).first();Bson filter = Filters.and( Filters.eq("user", req.getParameter("user")), Filters.eq("pass", req.getParameter("pass"))); // değer olarak bağlanırcollection.find(filter).first();Düzeltme
Bölüm başlığı “Düzeltme”NoSQL sorgularını tipli filtre yapılarıyla kurun; ham kullanıcı nesnelerini/operatörlerini sorguya geçirmeyin.