BOOK THIS SPACE FOR AD
ARTICLE ADEncode, məlumatı sistemlərin daha asan ötürəcəyi formata çevirmək üçün istifadə edilir. Bəzi insanlar bunu encrypt və decrypt ilə qarışdırırlar. Encrypt və decrypt-dən fərqli olaraq, burada əsas olan məlumatın məxfiliyi deyil. Sadəcə məlumatı fərqli sistemlərin başa düşəcəyi formata çevirməkdir.
Əslində biz gündəlik həyatımızda nələrisə fərqində olmadan encode və decode edirik. Məsələn browser-də axtarış edərkən url encode istifadə edirik. Burada boşluq, “ ? “ , “ = “, “ / ” və başqa simvollar URL-in strukturunda xüsusi mənaya sahibdir və bu simvollar encode edilir.
Bəs niyə encode-decode olunur? Səbəbi nədir?
Çünki bu simvolların bəzilərini URL özü istifadə edir bəziləri isə strukturu pozduğu üçün encode olunur. Bu səbəbdən, encode prosesində bu simvollar uyğun bir formata çevrilir. URL, sadəcə bir misal idi bu digər sistemlər üçündə keçərlidir.
Məsələn, email göndərilməsi zamanı xüsusi simvollar və UTF-8 formatında olan mətnlər base64 encode olunur. Və lazımı ünvana çatdırıldıqda decode edilir. Yəqinki bu proses olmasa nələr baş verəcəyini artıq anlayırsınız. Çox gümanki ya mətn sizə yarımçıq gələcək yada heç gəlməyəcək.
Artıq encode-decode prosesinin önəmini başa düşürük.
HTML encode vasitəsilə XSS və HTML injection hücumlarının qarşısını almaq
Biz məlumatı encode edərək başqa formata çevirə biliriksə, deməli attacker-in daxil etdiyi zərərli payloadlarında formatını dəyişib yarana biləcək hücumun qarşısını ala bilərik. İndi isə keçək praktiki nümunəyə.
İlk öncə frontend tərəfdə boşluqlu kodumuzu yazırıq:
Koda baxın və anlamağa çalışın sonra isə izahı oxuyun)
Kodu izah edək:
Istifadəçi inputa hər hansı bir data əlavə etdikdən sonra “Axtar” butonuna basdıqda Salam() funksiyası işə düşür. Bu funksiya gələn dəyəri userİnput adlı dəyişənə mənimsədir. Və həmin userInput-u innerHTML funksiyası ilə birbaşa HTML kodu kimi kodun içərisinə yerləşdirir.
Problemin nədə olduğunu düşünün. Sonra isə ikinci izaha baxın.
Problem:
Kod-dakı problem innerHTML-dir. Çünki istifadəçidən gələn datanı browser-ə HTML kodu kimi təqdim edir. Buda o deməkdirki istifadəçi öz kodunu inject edib çalışdıra bilər)
HTML injection hücumu:
sadə XSS hücumu:
Payload:PopUpIndi isə Frontend developer-in buraxdığı xətanı encode ilə backend developer həll edəcək :D
İstifadəçidən gələn injeksiya hücumlarının qarşısını almaq üçün burada html.escape() funksiyasından istifadə etdik. Bu funksiya payload daxilində istifadə edilən “<” ,“>” ,“&” kimi simvolları HTML encode etdi və yazılan zərərli payloadın kod kimi çalışmasına icazə vermədi.
Həmçinin burada innerHTML-i ,innerText və ya textContent-ə çevirərək boşluğu aradan qaldıra bilərik.
Oxuyaraq bura qədər gəldiyiniz üçün təşəkkürlər!