💎 حمله CSRF و چطوری ازش جلوگیری کنیم؟ 💎
امروز میخوایم در مورد یکی از حملات معروف تو دنیای وب، یعنی CSRF یا همون Cross-Site Request Forgery صحبت کنیم.
حالا CSRF چیه؟ 🤔
خب CSRF یه جور حملهست که هکر سعی میکنه با سوءاستفاده از سشن (session) کاربر، کارهایی رو به نمایندگی از کاربر انجام بده بدون اینکه اون کاربر خبر داشته باشه 😱. یعنی اگه کاربر توی یه سایت لاگین کرده باشه (مثل یه بانک یا شبکه اجتماعی) و بعد روی لینک یا دکمهای توی یه سایت دیگه کلیک کنه، هکر میتونه درخواستهایی رو به سایت اصلی (که کاربر لاگین کرده) بفرسته و کارهایی مثل انتقال پول یا تغییر اطلاعات کاربر رو انجام بده.
چجوری این حمله کار میکنه؟ 🎯
1️⃣ کاربر لاگین میکنه:
مثلا کاربر وارد حساب بانکی خودش میشه و یه سشن معتبر داره.
2️⃣ هکر یه لینک مخرب میسازه:
یه هکر توی یه سایت دیگه یه لینک یا فرم مخرب میسازه که درخواستهایی رو به حساب کاربر توی سایت بانکی ارسال میکنه.
3️⃣ کاربر روی لینک کلیک میکنه:
وقتی کاربر بدون اینکه خبر داشته باشه روی اون لینک کلیک میکنه، درخواست از طرف سشن کاربر به سرور سایت بانکی ارسال میشه.
4️⃣ هکر درخواستها رو اجرا میکنه:
سرور چون کاربر لاگین کرده، درخواست رو معتبر میدونه و اون کار انجام میشه (مثل انتقال پول، تغییر پسورد و...)
چجوری میشه جلوی CSRF رو گرفت؟ 🛡️
1️⃣ استفاده از CSRF Token
هر وقت کاربر یه فرم رو پر میکنه یا عملیاتی رو انجام میده، سرور یه توکن منحصربهفرد به فرم اضافه میکنه. این توکن رو سرور چک میکنه تا مطمئن بشه درخواست از طرف خود کاربر ارسال شده نه یه سایت دیگه. جنگو، فلکس و خیلی از فریمورکهای معروف به صورت پیشفرض از این مکانیزم پشتیبانی میکنن 🔑.
2️⃣ استفاده از روش POST به جای GET
برای درخواستهایی که نیاز به تایید کاربر دارن (مثل انتقال پول یا تغییر اطلاعات)، از POST استفاده کن، نه GET. توی درخواستهای GET دادهها توی URL قرار میگیرن که راحتتر میشه ازشون سوءاستفاده کرد. با POST درخواستها ایمنتر میشن 🛠️.
3️⃣ محدود کردن Referer Header
سرورها میتونن Referer header رو چک کنن تا مطمئن بشن که درخواستها از یه منبع قابل اعتماد (مثلاً همون سایت خودت) ارسال شدن نه از یه سایت دیگهای که هکرها توش لینک مخرب گذاشتن. اینجوری درخواستهای مشکوک رد میشن 🚫.
4️⃣ استفاده از Double Submit Cookies
یه راه دیگه برای جلوگیری از CSRF اینه که هم از کوکیها و هم از پارامترها استفاده کنی. توی این روش، یه کوکی حاوی CSRF token ارسال میشه و سرور مطمئن میشه که درخواست معتبره.
5️⃣ لاگاوت خودکار
اگه کاربر برای مدت زیادی هیچ فعالیتی توی سایت نداشت، اونو به صورت خودکار از سیستم خارج کن. اینجوری خطر CSRF کمتر میشه چون سشن کاربر خیلی طولانی باز نمیمونه ⏳.
جمعبندی ✅
فهمیدیم CSRF یه حمله جدیه که اگه درست ازش جلوگیری نشه، میتونه خیلی از اطلاعات حساس رو به خطر بندازه. با استفاده از CSRF Token، چک کردن Referer header و بقیه روشهایی که گفتیم، میتونی از اپلیکیشنهات در برابر این حمله محافظت کنی و امنیتشون رو بالا ببری 💪.
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم در مورد یکی از حملات معروف تو دنیای وب، یعنی CSRF یا همون Cross-Site Request Forgery صحبت کنیم.
حالا CSRF چیه؟ 🤔
خب CSRF یه جور حملهست که هکر سعی میکنه با سوءاستفاده از سشن (session) کاربر، کارهایی رو به نمایندگی از کاربر انجام بده بدون اینکه اون کاربر خبر داشته باشه 😱. یعنی اگه کاربر توی یه سایت لاگین کرده باشه (مثل یه بانک یا شبکه اجتماعی) و بعد روی لینک یا دکمهای توی یه سایت دیگه کلیک کنه، هکر میتونه درخواستهایی رو به سایت اصلی (که کاربر لاگین کرده) بفرسته و کارهایی مثل انتقال پول یا تغییر اطلاعات کاربر رو انجام بده.
چجوری این حمله کار میکنه؟ 🎯
1️⃣ کاربر لاگین میکنه:
مثلا کاربر وارد حساب بانکی خودش میشه و یه سشن معتبر داره.
2️⃣ هکر یه لینک مخرب میسازه:
یه هکر توی یه سایت دیگه یه لینک یا فرم مخرب میسازه که درخواستهایی رو به حساب کاربر توی سایت بانکی ارسال میکنه.
3️⃣ کاربر روی لینک کلیک میکنه:
وقتی کاربر بدون اینکه خبر داشته باشه روی اون لینک کلیک میکنه، درخواست از طرف سشن کاربر به سرور سایت بانکی ارسال میشه.
4️⃣ هکر درخواستها رو اجرا میکنه:
سرور چون کاربر لاگین کرده، درخواست رو معتبر میدونه و اون کار انجام میشه (مثل انتقال پول، تغییر پسورد و...)
چجوری میشه جلوی CSRF رو گرفت؟ 🛡️
1️⃣ استفاده از CSRF Token
هر وقت کاربر یه فرم رو پر میکنه یا عملیاتی رو انجام میده، سرور یه توکن منحصربهفرد به فرم اضافه میکنه. این توکن رو سرور چک میکنه تا مطمئن بشه درخواست از طرف خود کاربر ارسال شده نه یه سایت دیگه. جنگو، فلکس و خیلی از فریمورکهای معروف به صورت پیشفرض از این مکانیزم پشتیبانی میکنن 🔑.
2️⃣ استفاده از روش POST به جای GET
برای درخواستهایی که نیاز به تایید کاربر دارن (مثل انتقال پول یا تغییر اطلاعات)، از POST استفاده کن، نه GET. توی درخواستهای GET دادهها توی URL قرار میگیرن که راحتتر میشه ازشون سوءاستفاده کرد. با POST درخواستها ایمنتر میشن 🛠️.
3️⃣ محدود کردن Referer Header
سرورها میتونن Referer header رو چک کنن تا مطمئن بشن که درخواستها از یه منبع قابل اعتماد (مثلاً همون سایت خودت) ارسال شدن نه از یه سایت دیگهای که هکرها توش لینک مخرب گذاشتن. اینجوری درخواستهای مشکوک رد میشن 🚫.
4️⃣ استفاده از Double Submit Cookies
یه راه دیگه برای جلوگیری از CSRF اینه که هم از کوکیها و هم از پارامترها استفاده کنی. توی این روش، یه کوکی حاوی CSRF token ارسال میشه و سرور مطمئن میشه که درخواست معتبره.
5️⃣ لاگاوت خودکار
اگه کاربر برای مدت زیادی هیچ فعالیتی توی سایت نداشت، اونو به صورت خودکار از سیستم خارج کن. اینجوری خطر CSRF کمتر میشه چون سشن کاربر خیلی طولانی باز نمیمونه ⏳.
جمعبندی ✅
فهمیدیم CSRF یه حمله جدیه که اگه درست ازش جلوگیری نشه، میتونه خیلی از اطلاعات حساس رو به خطر بندازه. با استفاده از CSRF Token، چک کردن Referer header و بقیه روشهایی که گفتیم، میتونی از اپلیکیشنهات در برابر این حمله محافظت کنی و امنیتشون رو بالا ببری 💪.
#csrf #امنیت
👍10❤2🔥1