مارک پلاس

تکنولوژی نوین اینترنتی

محافظت از فرم‌ها با CSRF Token

دسته‌بندی‌ها

محافظت از فرم‌ها با CSRF Token
محافظت از فرم‌ها با CSRF Token

در لاراول، محافظت از فرم‌ها با CSRF Token یکی از ویژگی‌های امنیتی بسیار مهم است که از حملات Cross-Site Request Forgery (CSRF) جلوگیری می‌کند. حملات CSRF زمانی اتفاق می‌افتند که یک مهاجم کاربر را فریب می‌دهد تا درخواست‌های ناخواسته‌ای به سرور ارسال کند. این درخواست‌ها می‌توانند به صورت مخفیانه انجام شوند و به سرور اجازه دهند تا اعمالی مانند ارسال فرم‌ها یا تغییر داده‌ها را انجام دهد بدون اینکه کاربر از آن آگاه باشد.

لاراول به طور پیش‌فرض از CSRF Token برای تمام فرم‌های ارسال داده استفاده می‌کند تا اطمینان حاصل شود که درخواست‌ها از سوی کاربر واقعی و نه یک مهاجم ارسال شده‌اند.

نحوه عملکرد CSRF Token در لاراول

لاراول برای محافظت از فرم‌ها در برابر حملات CSRF، به هر درخواست POST، PUT، PATCH یا DELETE که شامل ارسال داده است، یک توکن CSRF می‌دهد. این توکن باید در هر فرم ارسال داده، در کنار سایر اطلاعات، قرار گیرد. وقتی فرم ارسال می‌شود، لاراول توکن ارسال‌شده را با توکنی که در سرور ذخیره شده است مقایسه می‌کند و اگر این توکن‌ها مطابقت نداشته باشند، درخواست رد می‌شود.


1. افزودن CSRF Token به فرم‌ها

لاراول برای اضافه کردن CSRF Token به فرم‌ها از دستور Blade @csrf استفاده می‌کند. این دستور یک ورودی مخفی به فرم اضافه می‌کند که توکن CSRF را به طور خودکار درون خود قرار می‌دهد.

مثال:

html
<form action="/submit" method="POST"> @csrf <input type="text" name="name" placeholder="Enter your name"> <button type="submit">Submit</button> </form>

در این مثال، @csrf یک ورودی مخفی به فرم اضافه می‌کند که به صورت خودکار توکن CSRF را از جلسه کاربر در سرور دریافت کرده و در قالب <input type="hidden" name="_token" value="CSRF-TOKEN"> در فرم قرار می‌دهد.


2. ارسال درخواست‌های AJAX با CSRF Token

هنگام ارسال درخواست‌های AJAX در لاراول، باید توکن CSRF را به هدر درخواست اضافه کنید. این کار می‌تواند به راحتی با استفاده از jQuery انجام شود.

مثال با استفاده از jQuery:

javascript
$(document).ready(function() { $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $('#submitForm').on('click', function() { $.ajax({ url: '/submit', type: 'POST', data: { name: 'John Doe' }, success: function(response) { console.log('Form submitted successfully'); } }); }); });

در اینجا، با استفاده از $.ajaxSetup(), هدر X-CSRF-TOKEN به تمام درخواست‌های AJAX ارسال می‌شود. همچنین باید توکن CSRF را در تگ <meta> در صفحه HTML قرار دهید:

html
<meta name="csrf-token" content="{{ csrf_token() }}">

این تگ meta حاوی توکن CSRF است که می‌توانید آن را از داخل قالب Blade دریافت کنید.


3. فعال‌سازی CSRF Protection در گلوبال‌ها

در لاراول، سیستم CSRF Token به صورت پیش‌فرض برای تمام درخواست‌های POST، PUT، PATCH و DELETE فعال است. این تنظیمات در فایل app/Http/Middleware/VerifyCsrfToken.php قرار دارد. شما می‌توانید این فایل را برای اعمال تنظیمات سفارشی و تعیین مسیرهایی که باید از محافظت CSRF معاف شوند، تغییر دهید.

فایل VerifyCsrfToken.php:

php
namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; class VerifyCsrfToken extends Middleware { /** * مسیرهایی که باید از CSRF محافظت شوند */ protected $except = [ 'some/route/to/exclude', // مسیرهایی که از CSRF محافظت نمی‌شوند ]; }

در اینجا، می‌توانید مسیرهایی که باید از CSRF محافظت نشوند را به آرایه except اضافه کنید. به عنوان مثال، اگر یک API خاص دارید که نیازی به CSRF Protection ندارد، می‌توانید آن را از این محافظت مستثنی کنید.


4. نحوه عملکرد توکن CSRF

لاراول به طور خودکار یک توکن CSRF برای هر درخواست وارد شده تولید می‌کند. این توکن در جلسه کاربر ذخیره می‌شود و هر بار که درخواست‌های تغییر داده می‌شود (مانند POST، PUT، DELETE)، لاراول آن توکن را از درخواست دریافت شده و مقایسه می‌کند. اگر توکن موجود در درخواست با توکن ذخیره شده در جلسه مطابقت نداشته باشد، درخواست رد می‌شود.

چرا توکن CSRF مهم است؟

  • امنیت بالا: با استفاده از CSRF Token، حملات CSRF به راحتی جلوگیری می‌شوند.

  • حفظ یکپارچگی داده‌ها: این سیستم از ارسال داده‌های ناخواسته توسط مهاجم جلوگیری می‌کند.

  • مقایسه توکن‌ها: توکن‌ها همیشه با مقدار ذخیره شده در جلسه مقایسه می‌شوند، بنابراین اگر توکن جعلی یا خراب باشد، درخواست رد می‌شود.


5. خطاها و مشکلات رایج

  • توکن CSRF معتبر نیست: اگر توکن CSRF درخواستی معتبر نباشد، لاراول به طور خودکار خطای 419 (Page Expired) را ارسال می‌کند.

    در صورتی که این خطا را دریافت کردید، ممکن است توکن CSRF منقضی شده باشد یا به دلیل برخی از دلایل، درخواست به درستی ارسال نشده باشد. این مشکل معمولاً زمانی رخ می‌دهد که کاربر مدت طولانی در صفحه باقی مانده باشد و توکن CSRF منقضی شده باشد.

  • عدم ارسال توکن در درخواست‌های AJAX: اگر توکن CSRF به هدر درخواست‌های AJAX اضافه نشود، لاراول درخواست را معتبر نمی‌داند و ممکن است خطای CSRF را مشاهده کنید.


نتیجه‌گیری

محافظت از فرم‌ها با استفاده از CSRF Token یکی از ویژگی‌های مهم امنیتی لاراول است که به راحتی پیاده‌سازی می‌شود. این توکن باعث می‌شود که حملات Cross-Site Request Forgery (CSRF) از بین برود و تنها درخواست‌هایی که از طرف کاربران معتبر ارسال شده‌اند پردازش شوند. با استفاده از روش‌های ساده‌ای مانند @csrf در فرم‌ها و تنظیمات AJAX، می‌توان امنیت اپلیکیشن‌های وب را به طور قابل توجهی افزایش داد.

محتوای مرتبط

پست‌های مرتبط