Prototype pollution
{"__proto__": {"isAdmin": true}} โ ishonchsiz JSON'ni chuqur merge qilsang, butun ilova buziladi. __proto__, constructor, prototype kalitlarini filtrla yoki Object.create(null) ishlat.
Hajm bombasi: 50 MB lik yoki 10 000 qavat chuqurlikdagi hujjat parserni va xotirani o'ldiradi. Server tomonda body limit (masalan 1 MB) va chuqurlik limitini o'rnat.
{ "limit_bytes": 1048576, "max_depth": 32, "reject_keys": ["__proto__", "constructor", "prototype"] }
| Xavf | Himoya |
|---|---|
| JSON ichida HTML/JS | Chiqishda escape qil, innerHTML'ga to'g'ridan-to'g'ri berma |
| eval() bilan parse | Hech qachon. Faqat JSON.parse |
| Ma'lumot sizib chiqishi | Javobga parol/token/hash qo'shma โ ochiq maydonlarni oq ro'yxatla |
| Katta fayl | Streaming parser (ijson, clarinet, SAX-uslub) yoki JSONL |
| Ishonchsiz raqam | Schema bilan minimum/maximum tekshir |
Tezlik
JSON.parse odatda tezroq ishlaydi, chunki u native. Katta massivlarni parse qilishdan oldin serverda kerakli maydonlarni tanlab yubor (sparse fields).
๐ Mashq: Xavfli kalitli hujjatni yozib, uni nima uchun filtrlash kerakligini o'ylab ko'r.