فرق بین XSS و XSRF چیست؟


چکیده


دوتا مفهوم سوای از هم داریم ، که خیلیا اینارو باهم اشتباها قاطی میکنن:


من سعی میکنم جدا جدا توضیح بدم ، و بگم چیه...




قبل از اینکه شروع کنم یه مفهومی هست که پیشنیازه توضیح بدم، بهش میگن:


اس او پی SOP چیست؟


یه پالیسی (سیاست/قانون/عرف...) هست که توی وب رعایتش میکنن ، اونم اینه که کلاینت/سرور ها رکوئستی رو valid میپندارن و معتبر میدونن که دقیقا از منبع درستش (منبع قبلی) باشه.


این اعتبار سنجی هم با چک کردن 3 تا چیز مشخص میشه:


1- پرتکلش همون باشه (مثلا HTTP)


2- آدرس هاست (دامین) همون باشه


3- پورت دقیقا همون باشه


مثلا یکی میاد یه رکوئست رو عوض میکنه به سمت براوزر شما و میگه من گوگلم:

https://hacker.com:80

براوزر شما از گوگل صحیح رو این میدونه:

https://google.com:80

حالا میاد چک میکنه:

https://hacker.com:80
https://google.com:80
\____/  \______/  \__/
Protocol  Host    Port

یکی از شرطها برقرار نیست پس ارور:
Same Origin Policy
میده و رکوئست دراپ میشه😬


با این پالیسی میشه جلوی خیلی از حمله هارو گرفت ، ولی حملات دیگری هستن که با وجود این پالیسی بازم قابل انجام هستن مثل:


که که قراره راجع بهشون حرف بزنیم ✅


حمله XSS چیست؟


ایکس اس اس ، XSS مخف XSS : Cross Site Scripting هست.


بطور کلی : یعنی که در یک سایت ، کد جاوااسکریپت اینجکت (تزریق) کنیم!
یعنی یه جوری کد جاوا اسکریپت رو بچپونیم توی بدنه سایت ، که کده اجرا بشه!


سناریوهای مختلف داره.... مثلا من یادمه اون اوایل که وبلاگستان فارسی راه افتاده بود و همه واسه خودشون یه وبلاگ درست میکردن توی بلاگفا و😋😬
وبلاگ نویسی تازه به اون معنا توی ایران راه افتاده بود ، خیلی راحت میشد XSS رو توی وبلاگ ها زد!


کافی بود یه کد جاوا اسکریپت رو توی قسمت کامنتها بذارین ، بجای کامنت... و 90 درصد سایتها اعتبار سنجیش نمیکردن و وقتی کامنتت نشون داده میشد ، کد شما هم برای بقیه مردم ران میشد😶‍🌫️


و نابود....😬


این روزها پیاده سازیش به این راحتیا نیست...


به هر نوع Javascript injection در یه وبسایت میگن XSS.


ایکس اس اس انواع مختلفی داره:


ایکس-اس-اس بازتابی:


مثلا یه سایتی هست ، یه فرمی داره که هر چی توش بنویسی میره سمت سرور و برمیگرده و بخش از کانتنت HTML صفحه میشه.


مثلا یه صفحه ساده رو فرض کنین ، که توی قسمت


‍‍name : ————————————


توی فرم هرچی بنویسن و فرم رو سابمیت کنسن ، درخواستت میره و برمیگرده و هرچی توی name نوشته باشین رو نشون میده:
‍‍
‍Your name is : "behrad"


اگه من به جای behrad یه کد جاوااسکریپت بزنم ، میره و میاد و اجرا میشه... این میشه بازتابی.


ایکس اس اس ذخیره شده ، زمانی هست که کد مخرب میره توی یه دیتابیسی ذخیره میشه، و از اون به بعد از توی دیتابیس خونده میشه و میاد(شاید به همه مردم زینپس حمله صورت بگیره)


یک نوع xss کلاینت ساید هست و زمانی هست که ایکس اس اس رو روی آبجک DOM میزنیم ( تخصصیه) وقتی DOM دست یه اسکریپت مخرب بیفته ، همه چیز صفحه دستش افتاده...


زمانی که یه جهشی توی اینپوت کلاینت صورت بگیره...


انواع دیگه هم داره که از حوصله این مقاله خارجه🙂


پس XSS یعنی که در یک سایت ، کد جاوااسکریپت اینجکت (تزریق) کنیم!


: حمله CSRF/XSRF چیست؟


حمله CSRF/XSRF سی‌سرف (موجسواری در دریا- sea surf) یا سی اس آر اف یا ایکس اس آر اف ، مخفف
CSRF/XSRF : Cross Site Request Forgery
هست.


به طور کلی این حمله یعنی:


یک دامین ، رکوئستی که مربوط به دامین دیگری هست رو جعل میکنه و نهایتا مقادیری رو تغییر میده.


عکس زیر رو مشاهده بفرمائين👇


CSRF Schema


نکته: این شکل رو از یه ویدیو گرفتم که لینکشو توی قسمت منابع میفرستم.
من این حمله رو با مثال توضیح میدم.


این حمله به شدت گسترده هست ، ازش میشه هزاران تا مثال زد:


فرض کنید یه url توی سایت داریم که هر موقع این url رو فراخونی کنیم ، و یه مقدار خاصی رو پست کنیم (HTTP POST) یه اتفاقی می افته... ( مثلا اکانتمون حذف میشه)


یه نوع API ساده طراحی شده... همه هم همینجوری طراحی میکنن..✅


طرف سایت فروم رو اینطوری طراحی کرده که برای حذف اکانت دکمه فلان رو بزن، که اون دکمه ریدایرت میده به :


mywesite.com/delete_my_acc.php


و اگر پارامتری به اسم delete با مقدار 1 از طرف من پست بشه، اکانت من پاک میشه.✅ همه همینجوری طراحی میکنن دیگه...


حالا،


من خودم نمیخوام اکانتم رو پاک کنم ! دارم توی سایت برای خودم میجرخم که میبینم یه نفر توی فروم یه لینک داده که یه عکس سسکی خشگلی هست❌😬


منم تحریک میشم و روش کلیک میکنم!
ریدایرکت میشم به یه سایت سسکی و یه عکس سسکی تر هم میبینم و به خیال خودم کیف میکنم😬😀
بعدش برمیگردم که بیام توی فروم دوباره بچرخم...


منتهی بهم ارور میده که اکانت شما پاک شده! و من دیگه اکانتی ندارم!


چه اتفاقی افتاد؟
من یک اتک XSRF خوردم و خودم خبر ندارم!


بیاین حمله رو بررسی کنیم.


سورس کد سایت سسکی این بوده:

<img source="sexy.png" >
<form
action="mywesite.com/delete_my_acc.php"
method="POST"
id="sexy"
>
<input type="hidden" name="delete" value="1" />
</form>
<script>
document.getElementById("sexy").submit()
</script>

برای خودتون تحلیل کنین ببینین چیکار میکنه...


من یه خلاصه ای میگم:


با جاوااسکریپت یه ریکوئست میزنه به اون URL و میگه که من بهرادم ... میخوام اکانتم رو پاک کنم!!!
باورت نمیشه من بهرادم؟ اینم کوکی هام!!!!!!
🍪🍪🍪🍪🍪🍪


(کوکی های من رو چجوری گرفت؟! نگرفت! خود براوزر شما برای هر URL که کش کرده {میشناسه} کوکی هارو انکپسوله میکنه و میفرسته همیشه.... واسه همینه که شما میتونی توی یه سایت لاگین کنی!)


خلاصه من CSRF خوردم و اکانت من پاک شد...


سیاست SOP که قبلش توضیح دادم، اینجا فقط جلوی این رو میگیره که سایت سسکی هکر نتونه جواب ریکوئست رو بگیره... یعنی ریکوئست رفته و موقع برگشت جوابش دراپ شده....
خب چه فایده... اکانت من پاک شده :)
هکر چیزی از نتیجه رو ندید.... فقط تیری توی تاریکی در کرد!


این یه مثال خیـــــــــــلی ساده بود...


حمله CSRF


من به همین جا بسنده میکنم...




خلاصه کلام اینکه:


سی-سرف یعنی یک دامین ، رکوئستی که مربوط به دامین دیگری هست رو جعل میکنه و نهایتا مقادیری رو تغییر میده و ایکس اس اس هم یعنی تزریق هر نوع جاوااسکریپتی در یک وبسایت.


کپی رایت


این یک مقاله آزاد و متن‌باز تحت مجوز GFDL1-3 می‌باشد، بنابراین اجازه کپی، توزیع و/یا تغییر این سند با شرایط مجوز GNU Free Documentation License داده شده است.


نویسنده


منابع


دو ویدیو آخر بسیار عالی هستن.


مسائل مرتبط با این مقاله


این مقاله بصورت آزاد و اپن‌سورس در مخزن کتابها/مقالات آزاد در لینک زیر در دسترس است:


https://github.com/TadavomnisT/Free_Books-Documents/tree/main/Articles/3-XSS-XSRF-Pr


نسخه انگلیسی این مقاله:


https://github.com/TadavomnisT/Free_Books-Documents/tree/main/Articles/3-XSS-XSRF-En


هر نوع اشکال علمی، مساله یا بحث مربوط با این مقاله را میتوانید از طریق Issue در ریپازیتوری یا ایمیل مطرح نمایید: