به طور خلاصه XSRF, CSRF يا همان ( (Cross Site Reference Forgery به اين معنا است كه شخص مهاجم از اعتماد سايت*ها نسبت به كاربرانشان براي حملات خود سوءاستفاده مي*كند و اعمالي را توسط شما و با سطح دسترسي شما بر روي سايت انجام دهند و اطلاعات مورد نظر خود (محتويات كوكي يا سشن و امثال آن) را استخراج كرده و به هر سايتي كه تمايل دارد ارسال كند. اين*كار عموما با تزريق image tag در HTML يا JavaScript انجام مي شود كه معمولا نفوذگر اين كد ها را در email يا سايتي خاص قرار مي دهد ; كاربري كه اين صفحه را مشاهده مي*كند، متوجه وجود هيچگونه مشكلي نخواهد شد اما با باز شدن email يا لود كردن صفحه سايت كدي با سطح دسترسي شخص بازديد كننده بر روي سايت اجرا خواهد شد. وبه هكرها امكان مي دهند كه ، اطلاعات شخصي كاربري كه در آن زمان وارد سايت شده است را در اختيار گرفته و از آن ها سوءاستفاده كنند.
HTML:
<img src="http://www.google.com/logout/" />
شما و همه کسانی که اون صفحه رو باز کنن، براوزر میره برای لود اون عکس و کوکی شما که توسط دامنه گوگل ایجاد شده هم برای تائی هویت ارسال میشه. اینجوری همه کسانی که اون صفحه رو میبینن از اکانت گوگلشون بیرون انداخته میشن!
خب ممکنه بگید که مهم نیست و خطری نداره. اما بقیهاش رو گوش کنید:
اگر شما از یه cms یا برنامهای استفاده کنید که مثلا مدیر برای حذف یه مطلب کافی باشه یه آدرسی شبیه اینو ببینه:
site.com/admin/delete/74
(کما اینکه در بسیاری از cms ها همینطوره) و اون cms باگ csrf داشته باشه، اونوقت یک کاربر شیطون به راحتی میتونه تمام مطالب شما رو پاک کنه!!!
مثلا کافیه یه ایمیل به شما بزنه که داخلش مثلا هزارتا عکس با ابعاد 0×0 گذاشته باشه که با لود هر کدوم، یه مطلب شما پاک میشه؛
HTML:
<img width=0 height=0 border=0 src="http://site.com/admin/delete/1" />
<img width=0 height=0 border=0 src="http://site.com/admin/delete/2" />
<img width=0 height=0 border=0 src="http://site.com/admin/delete/3" />
<img width=0 height=0 border=0 src="http://site.com/admin/delete/4" />
...
همچنین فقط مشکل حذف نیست. با باگ CSRF میشه حتی پسورد ادمین رو هم عوض کرد اگر فرم تعویض،
پسورد قبلی رو نخواد!
کافیه فریمی مخفی در یک صفحه html کار گذاشته بشه که داخل اون فریم، فرم تعویض پسورد باشه و پس از لود صفحه اون فرم با جاوا اسکریپت ثبت بشه!
برای حفاظت در مقابل این حمله هم چندین راهکار هست که میشه همشون رو با هم استفاده کرد. از جمله:
1. استفاده از سشن یا یک کد رندوم دیگر که متغیر با زمان هست و ارسالش همراه آدرس برای logout و حذف مطالب و سایر عملیاتهای کاربر.
2. توجه به http_refferer
چون وقتی از یه سایت دیگه این آدرس حساس فراخوانی میشه، refferer ش سایتی غیر از سایت شما خواهد بود.
3. استقاده نکردن از cms های متداولی که طریقه حذف و تغییر در آنها شناخته شده است.
4. ....