Sanitization — foydalanuvchi yoki tashqi tizimdan kelgan ma’lumotni xavfsiz ko‘rinishga keltirish, keraksiz yoki xavfli qismlarini olib tashlash jarayoni. Bu web xavfsizlikda, ayniqsa XSS xavfini kamaytirishda muhim tushuncha hisoblanadi.
Sanitization ma’lumotni rad qilishdan ko‘ra, uni tozalash yoki ruxsat etilgan shaklga keltirishga qaratilgan.
Vazifasi
Sanitization quyidagi vazifalarni bajaradi:
- zararli HTML taglarni olib tashlash;
- xavfli JavaScript kodni o‘chirish;
- foydalanuvchi inputini xavfsiz ko‘rinishga keltirish;
- rich text editor ma’lumotlarini tozalash;
- markdown yoki HTML contentni nazorat qilish;
- databasega tozalangan qiymat saqlash;
- XSS xavfini kamaytirish;
- output chiqarishda xavfsizlikni oshirish.
Masalan, foydalanuvchi kommentga <script> tag kiritgan bo‘lsa, sanitization bu tagni olib tashlashi mumkin.
Sanitization qanday ishlaydi?
Sanitization ma’lumotni tekshiradi va xavfli yoki ruxsat etilmagan qismlarini o‘zgartiradi yoki olib tashlaydi.
Oddiy jarayon:
- input qiymat olinadi;
- ruxsat etilgan va taqiqlangan elementlar aniqlanadi;
- xavfli tag, attribute yoki script qismlar olib tashlanadi;
- qiymat xavfsiz shaklga keltiriladi;
- tozalangan ma’lumot saqlanadi yoki sahifaga chiqariladi.
Sanitization ayniqsa foydalanuvchiga cheklangan HTML yozishga ruxsat berilgan tizimlarda kerak bo‘ladi.
Validation bilan farqi
Sanitization va validation farqli vazifani bajaradi.
- validation qiymat qoidalarga mos yoki mos emasligini tekshiradi;
- sanitization qiymatni tozalaydi;
- validation noto‘g‘ri qiymatni rad qilishi mumkin;
- sanitization noto‘g‘ri yoki xavfli qismlarni olib tashlashi mumkin.
Masalan, username faqat harf va raqamdan iboratligini tekshirish validation. Komment ichidan zararli HTML taglarni olib tashlash sanitization.
HTML sanitization
HTML sanitization — HTML matn ichidan xavfli elementlarni olib tashlash jarayoni.
Odatda quyidagilar nazorat qilinadi:
<script>taglari;onload,onclickkabi event attributelar;javascript:URL qiymatlari;- xavfli iframe;
- style ichidagi xavfli qiymatlar;
- noma’lum yoki ruxsat etilmagan taglar.
HTML sanitization blog, forum, komment, CMS va rich text editorlarda ishlatiladi.
Allowlist sanitization
Allowlist sanitization faqat ruxsat berilgan tag va attributelarni qoldiradi.
Masalan, ruxsat berilishi mumkin:
<b>;<i>;<p>;<ul>;<li>;<a href="">.
Boshqa taglar olib tashlanadi. Bu usul denylistga qaraganda aniqroq va xavfsizroq hisoblanadi.
Denylist sanitization
Denylist sanitization taqiqlangan elementlarni olib tashlaydi.
Masalan:
<script>;<iframe>;onclick;onerror;javascript:.
Denylist hamma xavfli variantlarni oldindan bilishni talab qiladi. Shu sababli xavfsizlikda allowlist yondashuvi ko‘proq ishlatiladi.
Output escaping bilan farqi
Sanitization va output escaping yaqin, lekin bir xil emas.
- sanitization ma’lumot ichidan xavfli qismlarni olib tashlaydi;
- output escaping maxsus belgilarni HTML tomonidan kod sifatida bajarilmaydigan shaklga o‘tkazadi;
- sanitization contentni o‘zgartirishi mumkin;
- escaping contentni matn sifatida ko‘rsatadi.
Agar HTML ishlatishga ruxsat berilmasa, escaping ko‘pincha to‘g‘riroq yondashuv bo‘ladi.
XSS bilan bog‘liqligi
Sanitization XSS xavfini kamaytirishda ishlatiladi. XSS foydalanuvchi kiritgan zararli script browserda bajarilganda yuzaga keladi.
Sanitization XSSga qarshi:
- script taglarni olib tashlaydi;
- event attribute’larni o‘chiradi;
- xavfli URL schema’larni bloklaydi;
- ruxsat etilmagan HTMLni tozalaydi;
- rich text contentni nazorat qiladi.
Lekin sanitization noto‘g‘ri bajarilsa, XSS xavfi saqlanib qolishi mumkin.
Rich text editor
Rich text editor foydalanuvchiga formatlangan matn yozish imkonini beradi. Bunday tizimlarda sanitization muhim.
Rich text editorlarda:
- bold va italic ruxsat berilishi mumkin;
- linklar nazorat qilinadi;
- rasm manbalari tekshiriladi;
- script va event attributelar bloklanadi;
- paste qilingan HTML tozalanadi.
Blog, CMS va forum tizimlarida bu ko‘p uchraydi.
Markdown sanitization
Markdown matn HTMLga aylantirilganda XSS xavfi paydo bo‘lishi mumkin. Shu sababli markdown natijasi ham sanitization qilinishi mumkin.
Markdown bilan xavfli holatlar:
- HTML tag kiritish;
- link ichida
javascript:ishlatish; - image URL orqali zararli qiymat berish;
- raw HTML ruxsat etilishi;
- renderer noto‘g‘ri sozlanishi.
Markdown ishlatiladigan wiki yoki blog tizimlarida sanitization muhim.
File name sanitization
Sanitization faqat HTML uchun emas, fayl nomlari uchun ham ishlatiladi.
File name sanitization quyidagilarni cheklaydi:
- path traversal belgilar;
- maxsus belgilar;
- juda uzun nomlar;
- noto‘g‘ri extension;
- boshqaruv belgilar;
- bir xil nom konfliktlari.
Masalan, upload qilingan fayl nomi server file system uchun xavfsiz ko‘rinishga keltiriladi.
Dasturlashdagi o‘rni
Sanitization foydalanuvchi kiritgan ma’lumotni xavfsiz shaklga keltirish uchun ishlatiladi. U web ilovalarda XSS, HTML injection va noto‘g‘ri content saqlanishi xavfini kamaytiradi.
Sanitization quyidagi tizimlarda uchraydi:
- blog va CMS;
- komment tizimlari;
- forumlar;
- chat ilovalari;
- admin panellar;
- rich text editorlar;
- markdown editorlar;
- fayl upload tizimlari.
Bog‘liq tushunchalar
Input validation, Output escaping, XSS, HTML injection, Markdown, Rich text editor, CSP, Web security, Frontend, Security