تکنولوژی نوین اینترنتی
در لاراول، محافظت از فرمها با CSRF Token یکی از ویژگیهای امنیتی بسیار مهم است که از حملات Cross-Site Request Forgery (CSRF) جلوگیری میکند. حملات CSRF زمانی اتفاق میافتند که یک مهاجم کاربر را فریب میدهد تا درخواستهای ناخواستهای به سرور ارسال کند. این درخواستها میتوانند به صورت مخفیانه انجام شوند و به سرور اجازه دهند تا اعمالی مانند ارسال فرمها یا تغییر دادهها را انجام دهد بدون اینکه کاربر از آن آگاه باشد.
لاراول به طور پیشفرض از CSRF Token برای تمام فرمهای ارسال داده استفاده میکند تا اطمینان حاصل شود که درخواستها از سوی کاربر واقعی و نه یک مهاجم ارسال شدهاند.
لاراول برای محافظت از فرمها در برابر حملات CSRF، به هر درخواست POST، PUT، PATCH یا DELETE که شامل ارسال داده است، یک توکن CSRF میدهد. این توکن باید در هر فرم ارسال داده، در کنار سایر اطلاعات، قرار گیرد. وقتی فرم ارسال میشود، لاراول توکن ارسالشده را با توکنی که در سرور ذخیره شده است مقایسه میکند و اگر این توکنها مطابقت نداشته باشند، درخواست رد میشود.
لاراول برای اضافه کردن CSRF Token به فرمها از دستور Blade @csrf
استفاده میکند. این دستور یک ورودی مخفی به فرم اضافه میکند که توکن CSRF را به طور خودکار درون خود قرار میدهد.
در این مثال، @csrf
یک ورودی مخفی به فرم اضافه میکند که به صورت خودکار توکن CSRF را از جلسه کاربر در سرور دریافت کرده و در قالب <input type="hidden" name="_token" value="CSRF-TOKEN">
در فرم قرار میدهد.
هنگام ارسال درخواستهای AJAX در لاراول، باید توکن CSRF را به هدر درخواست اضافه کنید. این کار میتواند به راحتی با استفاده از jQuery انجام شود.
در اینجا، با استفاده از $.ajaxSetup()
, هدر X-CSRF-TOKEN
به تمام درخواستهای AJAX ارسال میشود. همچنین باید توکن CSRF را در تگ <meta>
در صفحه HTML قرار دهید:
این تگ meta
حاوی توکن CSRF است که میتوانید آن را از داخل قالب Blade دریافت کنید.
در لاراول، سیستم CSRF Token به صورت پیشفرض برای تمام درخواستهای POST، PUT، PATCH و DELETE فعال است. این تنظیمات در فایل app/Http/Middleware/VerifyCsrfToken.php
قرار دارد. شما میتوانید این فایل را برای اعمال تنظیمات سفارشی و تعیین مسیرهایی که باید از محافظت CSRF معاف شوند، تغییر دهید.
VerifyCsrfToken.php
:
در اینجا، میتوانید مسیرهایی که باید از CSRF محافظت نشوند را به آرایه except
اضافه کنید. به عنوان مثال، اگر یک API خاص دارید که نیازی به CSRF Protection ندارد، میتوانید آن را از این محافظت مستثنی کنید.
لاراول به طور خودکار یک توکن CSRF برای هر درخواست وارد شده تولید میکند. این توکن در جلسه کاربر ذخیره میشود و هر بار که درخواستهای تغییر داده میشود (مانند POST، PUT، DELETE)، لاراول آن توکن را از درخواست دریافت شده و مقایسه میکند. اگر توکن موجود در درخواست با توکن ذخیره شده در جلسه مطابقت نداشته باشد، درخواست رد میشود.
امنیت بالا: با استفاده از CSRF Token، حملات CSRF به راحتی جلوگیری میشوند.
حفظ یکپارچگی دادهها: این سیستم از ارسال دادههای ناخواسته توسط مهاجم جلوگیری میکند.
مقایسه توکنها: توکنها همیشه با مقدار ذخیره شده در جلسه مقایسه میشوند، بنابراین اگر توکن جعلی یا خراب باشد، درخواست رد میشود.
توکن CSRF معتبر نیست: اگر توکن CSRF درخواستی معتبر نباشد، لاراول به طور خودکار خطای 419 (Page Expired
) را ارسال میکند.
در صورتی که این خطا را دریافت کردید، ممکن است توکن CSRF منقضی شده باشد یا به دلیل برخی از دلایل، درخواست به درستی ارسال نشده باشد. این مشکل معمولاً زمانی رخ میدهد که کاربر مدت طولانی در صفحه باقی مانده باشد و توکن CSRF منقضی شده باشد.
عدم ارسال توکن در درخواستهای AJAX: اگر توکن CSRF به هدر درخواستهای AJAX اضافه نشود، لاراول درخواست را معتبر نمیداند و ممکن است خطای CSRF را مشاهده کنید.
محافظت از فرمها با استفاده از CSRF Token یکی از ویژگیهای مهم امنیتی لاراول است که به راحتی پیادهسازی میشود. این توکن باعث میشود که حملات Cross-Site Request Forgery (CSRF) از بین برود و تنها درخواستهایی که از طرف کاربران معتبر ارسال شدهاند پردازش شوند. با استفاده از روشهای سادهای مانند @csrf
در فرمها و تنظیمات AJAX، میتوان امنیت اپلیکیشنهای وب را به طور قابل توجهی افزایش داد.