در حال بارگذاری...
بررسی آسیبپذیری جعل درخواست بین سایتی (CSRF) که به مهاجم اجازه میدهد عملیات غیرمجاز از طرف کاربر انجام دهد.
اهداف این درس
جعل درخواست بین سایتی (Cross-Site Request Forgery یا CSRF) حملهای است که در آن مهاجم کاربر را فریب میدهد تا درخواستی به سرور ارسال کند. اگر کاربر به سرور احراز هویت شده باشد، سرور درخواست را معتبر میداند و عملیات انجام میشود.
حملهای که در آن مهاجم از مرورگر قربانی (که به سرور احراز هویت شده) برای ارسال درخواستهای غیرمجاز استفاده میکند.
تمام فرمها و درخواستهای حساس را شناسایی کنید:
1# بررسی فرم2curl -s https://target.com/change-password | grep -i 'csrf\|token\|_token'34# بررسی header5curl -v https://target.com/api/change-password 2>&1 | grep -i 'csrf\|x-csrf'67# بررسی cookie8curl -v https://target.com 2>&1 | grep -i 'csrf'1<!-- صفحه مخرب -->2<html>3<body>4 <h1>برنده شدید!</h1>5 <form action="https://target.com/change-password" method="POST" id="csrf-form">6 <input type="hidden" name="new_password" value="hacked123" />7 <input type="hidden" name="confirm_password" value="hacked123" />8 </form>9 <script>10 document.getElementById("csrf-form").submit();11 </script>12</body>13</html>| روش | تأثیر | پیچیدگی |
|---|---|---|
| CSRF token | بسیار بالا | متوسط |
| SameSite cookie | بالا | کم |
| بررسی Origin header | متوسط | کم |
| بررسی Referer header | متوسط | کم |
| CAPTCHA | بالا | زیاد |
CSRF میتواند منجر به تغییر رمز عبور، انتقال وجه، تغییر ایمیل، حذف حساب و سایر عملیات غیرمجاز شود.
1# Django بهصورت پیشفرض CSRF token ارائه میدهد23# در template4<form method="POST">5 {% csrf_token %}6 <input type="text" name="username">7 <button type="submit">ارسال</button>8</form>910# در view11from django.views.decorators.csrf import csrf_protect1213@csrf_protect14def change_password(request):15 if request.method == 'POST':16 # تغییر رمز عبور17 pass1const csrf = require('csurf');2const csrfProtection = csrf({ cookie: true });34// middleware5app.use(csrfProtection);67// در route8app.get('/form', (req, res) => {9 res.render('form', { csrfToken: req.csrfToken() });10});1112app.post('/process', (req, res) => {13 // CSRF token بهصورت خودکار بررسی میشود14 res.send('موفق');15});توصیه عملی
از SameSite=Strict یا Lax برای Cookieها استفاده کنید و CSRF token را در تمام فرمهای حساس قرار دهید.
هر فرم حساس باید CSRF token داشته باشد.
SameSite=Strict بالاترین سطح محافظت را ارائه میدهد.
بررسی Origin و Referer header هم مفید است.
عملیات حساس نباید فقط با GET انجام شوند.
CSRF چه نوع حملهای است؟
CSRF چیست و چگونه کار میکند؟
CSRF (Cross-Site Request Forgery) حملهای است که در آن مهاجم کاربر را فریب میدهد تا درخواستی به سرور ارسال کند. اگر کاربر به سرور احراز هویت شده باشد، سرور درخواست را معتبر میداند و عملیات انجام میشود.
چگونه از CSRF جلوگیری کنیم؟
راههای جلوگیری شامل: استفاده از CSRF token، تنظیم SameSite cookie، بررسی Origin و Referer header، و استفاده از CAPTCHA برای عملیات حساس.
تفاوت CSRF و XSS چیست؟
در CSRF، مهاجم از مرورگر قربانی برای ارسال درخواست استفاده میکند. در XSS، مهاجم کد JavaScript در صفحه اجرا میکند. CSRF نیاز به تعامل کاربر دارد اما XSS میتواند بدون تعامل اجرا شود.