شناخت و پیشگیری از یکی از رخنه (Exploit) های متداول وب اپها: XSS
📃 به عنوان توسعهدهنده وب بهتره سعی کنیم تا کدی که توسعه میدیم تا حدامکان #Secure (امن) باشه و در مقابل رخنهها و حملات ساده و متداول آسیب پذیر (#vulnerable) نباشه (و شانس رخنه رو کم کنیم).
استفاده موفق از آسیب پذیری Cross-site-scripting یا XSS باعث میشه اپ شما کد های مخرب یا ناخواسته #Javascript رو برای دیگر کاربران نمایش بده و اجرا کنه.
🎃 کد جاوا اسکریپ مخرب میتونه:
❕اطلاعات کاربران رو بدزده (یا زمینهساز حملات پیچیدهتری بشه)
❕فعالیت هایی رو انجام بده که ناخواسته اند و مورد تایید یا نیاز کاربر نیستند.
یکی از مفروضات این مشکل امنیتی اینه که محتوایی که وب سایت یا اپ ما تولید میکنه “قابل اعتماد” است. پس برای پیشگیری اش منطقیه که هرچیزی که ممکنه این “اعتماد” رو خراب کنه مدنظر بگیریم.
⬅️ به صورت خیلی خلاصه، اگر کد شما هر محتوا یا ورودی که از سمت کاربر بیاد رو بدون “تمیز کردن” و بررسی صحت (#Validation) ذخیره کنه یا نمایش بده، این رخنه میتونه براش اتفاق بیفته.
⚔️ به عنوان اولین لایه پیشگیری، در وب فریمورک #Django ، فرض براینه که هرچه که در context برای رندر شدن در اختیارش میگذارید، “ناامن” است و با کمک متد html.escape() همه کاراکتر های html را به معادلشون تبدیل میکنه.
مثلا:
به
<img src="https://lnkd.in/eUCsnhnx;
تبدیل میشه.
🌪 اما متاسفانه این کافی نیست:
1- این پیشفرض فقط شامل Django template engine میشود، مثلا اگر Angular یا React یا Vue استفاده میکنید، احتمالا شامل این موضوع نیستید.
2- افزونه یا اپ های شخص ثالثی که استفاده میکنیم ممکنه شامل این آسیب پذیری باشند.
3- اگر از ()mark_safe یا همون “Safe string” ها در متدها و #template ها استفاده میکنید، دیگه خروجی شما شامل این تبدیل نمیشه. (پیشنهاد میکنم تاجایی که میتونید از این متدها استفاده نکنید.)
4- بعضی از attr ها یا روش استفاده ما از متغیرها در template، ممکنه شامل این پیشفرض نشوند یا دورش بزنند،
مثلا:
میتونه با سواستفاده تبدیل شه به
5- کاراکتر backtick و همینطور دیتایی که با base64 انکود بشه escape نمیشود، در واقع محتوایی که کاراکترهای quote یا html نداشته باشه چیزی برای escape شدن نداره، مثلا:
spinner.minimum = {{ minimum_price }} ;
میتونه تبدیل شه به:
spinner.minimum = 0; alert(1) ;
سعی میکنم در پست دیگه ای، با جزئیات بیشتری روشها و راههایی که میتونیم تا حد ممکن از XSS در اپ Django مان پیشگیری (#mitigate ) کنیم رو جمع آوری کنم و بنویسم.
لینک مقاله اصلی که ازش الهام گرفتم:
https://lnkd.in/erpqQREc
از لینکدین Alireza Amouzadeh
تشکر از @alireza_amouzadeh
لینک:
https://www.linkedin.com/posts/alireza-amouzadeh_xss-exploitation-in-django-applications-activity-6948679390654291968-6_IX?utm_source=linkedin_share&utm_medium=member_desktop_web