خلاصه اولیه: لاراول به طور پیشفرض برنامه شما را امنتر میکند، که همین مسئله آن را تبدیل به فریموورک پیشنهادی برای برنامههای حیاتی کرده است. در این مقاله، به طور خلاصه شما را در ساخت برنامههای حیاتی و آماده به تولید، توسط لاراول راهنمایی خواهیم کرد.
معرفی
برای یک برنامه حیاتی، دو سطح امنیتی هستند که اهمیت دارند: امنیت برنامه و امینت سرور. لاراول یک فریموورک توسعه است و بر روی امنیت سرور شما تاثیری ندارد، بلکه فقط برنامه شما را تحت تاثیر قرار میدهد.
امکانات لاراول شما را قادر میسازند تا از همه چیز به طور امن استفاده کنید. تمام دادهها در جایی که مورد نیاز هستند، تصفیه میشوند، مگر این که شما از لاراول با کوئریهای خام استفاده کنید. در این صورت، اساسا هیچ کمکی از لاراول دریافت نمیکنید. نکته در اینجاست که لاراول برای آسیبپذیریهای رایج، برای شما امنیت را به ارمغان میآورد.
پس در این مقاله، درباره مهمترین امکانات امنیتی لاراول، مطالبی یاد خواهید گرفت.
محافظت از برنامههای لاراول در مقابل SQL Injection
تا وقتی که از Fluent Query Builer یا Eloquent استفاده کنید، لاراول از شما در مقابل SQL Injection محافظت میکند.
لاراول این کار را با ساخت بیانیههای آمادهای انجام میدهد، که از هر ورودی کاربری که ممکن است از طریق فرم شما وارد شود، خارج میشوند. اگر هکرها ورودی جدیدی به یک فرم اضافه کنند، ممکن است که کوئری SQL خود را اجرا کرده، و تلاش کنند دیتابیس برنامه شما را خوانده، و یا خراب کنند. گرچه، از آنجایی که از Eloquent استفاده میکنید، این اتفاق نخواهد افتاد. Eloquent از این دستور SQL میگذرد و این کوئری نامعتبر به عنوان یک متن در دیتابیس ذخیره میشود.
محافظت از کوکیها در برنامههای لاراول
لاراول از کوکیهای شما نیز محافظت خواهد کرد. برای این کار، باید یک کلید جدید برای برنامه خود بسازید. اگر در حال کار بر روی یک پروژه هستید، از دستور key:generate استفاده کنید.
برای پروژههای موجود بر روی لاراول ۳، باید به یک ویرایشگر متن منتقل شوید، پس به شاخه config برنامه خود رفته، و فایل application.php را باز کنید. در آنجا، میتوانید کلید مورد نظر را زیر بخش «Application Key» پیدا کنید.
بر روی لاراول ۵ و بالاتر، «Application Key» در واقع «Encryption Key» نام دارد. میتوانید این کلید را در فایل app.phpکه در پوشه config مستقر است، پیدا کنید.
Application Key یا Encryption Key از کلاسهای کوکی برای ساخت رشتهها و hashهای امن استفاده میکند. بسیار مهم است که این کلید مخفی مانده، و با کسی به اشتراک گذاشته نشود. همچنین، بهتر است آن را از ۳۲ کاراکتر، و کاراکترهای درهم بسازید تا کسی نتواند آن را حدث بزند.
همانطور که در بالا اشاره شد، لاراول به طور خودکار Application Key را میسازد؛ گرچه، اگر لازم است، میتوانید آن را در فایل application.php ویرایش کنید.
محافظت از جعل درخواست سایت (CSRF = Cross-Site Request Forgery) در لاراول
لاراول برای حفاظت از برنامه در مقابل یک حمله CSRF، از متد Form Classes Token استفاده میکند. پس اگر به سورس کد یک فرم نگاه کنید، یک فیلد مخفی به نام CSRF token خواهید دید:
<form name="test">
{!! csrf_field() !!}
<!-- باقی خروجیها میتوانند در اینجا قرار بگیرند-->
</form>
این نشانه مطمئن میشود که این درخوست از برنامه شما میآید و نه از جایی دیگر. باید مطمئن شوید که این نشانه در حال بررسی یک درخواست جعلی است. لاراول به طور پیشفرض، محافظت در مقابل CSRF را فعال میکند.
لاراول یک فیلتر CSRF از پیش تعریف شده در برنامه شما اضافه میکند که به این صورت است:
<?php
Route::filter('csrf', function() {
if (Session::token() != Input::get('_token')) {
throw new Illuminate\Session\TokenMismatchException;
}
});
فیلتر CSRF شما را قادر میسازد تا یک درخواست جعلی را بررسی کنید، و اگر این درخواست جعلی باشد، یک خطای HTTP 500 را بر میگرداند. میتوانید از متد Form Classes Token و فیلتر CSRF به طور همزمان برای محافظت از routeهای برنامه خود استفاده کنید.
آسیبپذیریهای Mass Assignment در لاراول
ابزار Mapping مرتبط با آبجکت (مانند Eloquent) قابلیت mass-assign کردن ویژگیها، مستقیما در دیتابیس را دارند، که یک آسیبپذیری امنیتی است.
برای کسانی که نمیدانند، ORM لاراول (Eloquent) پیادهسازی سادهای برای کار با دیتایس را به همراه دارد. هر جدول دیتابیس، یک Model_Class متناظر دارد که با آن جدول در تعامل است.
Mass Assignment شما را قادر میسازد که در یک حرکت، چندین فیلد را بر روی یک مدل تنظیم کنید. چیزی مانند:
$user = new User(Input::all());
برای مثال، برنامه شما میتواند یک جدول کاربران و یک فیلد به نام user_type داشته باشد، که خود این فیلد میتواند مقادیر user (کاربر) یا admin (مدیر) را داشته باشد.
در این صورت، نمیخواهید که کاربرانتان به صورت دستی این فیلد را بروزرسانی کنند. گرچه، کد بالا میتواند به یک نفر اجازه دهد تا یک فیلد جدید را وارد کند و پس از آن، بتواند حساب خود را به admin تغییر دهد.
با اضافه کردن این کد، میتوانید مطمئن شوید که مقادیر بالا با استفاده از Mass Assignment قابل بروزرسانی هستند:
$fillable = array('name', 'password', 'email');
برای این که بتوانید مقدار user_type را بروزرسانی کنید، باید آن را به صورت خارجی بر روی مدل تنظیم کرده، و ذخیره کنید. به این صورت:
$user->user_type = 'admin';
$user->save();
محافظت از اسکریپتهای سایت در لاراول
سینتکس @{{}} در لاراول از هر آبجکت HTMLای که بخشی از متغیر view هستند، میگذرد. از آنجایی که ممکن است یک کاربر رشته بعدی را در یک کامنت یا پروفایل کاربر احراز هویت کند، این مسئله مهم است:
My list <script>alert("spam spam spam!")</script>
بدون محفاظت از اسکریپتهای میانسایتی، یک متغیر view مانند مورد بالا، در یک صفحه وب، و در قالب یک صفحه هشدار نمایش داده میشود، و در نتیجه این نوع حمله که اسکریپت میانسایتی نامیده میشود، شکل میگیرد.
خوشبختانه، وقتی که یک متغیر در داخل تگهای @{{}} رندر میشود، لاراول به جایش رشتهای به مانند نمونه زیر را رندر میکند:
My list <script>alert("spam spam spam!")</script>
این باعث میشود که برنامههای لاراول در مقابل این نوع حمله ایمن شوند.
نتیجه گیری
همانطور که میدانید، کارهای دیگری نیز هستند که باید برای حفاظت از برنامههای حیاتی خود انجام دهید. مثلا غیر فعالسازی گزارش خطاهای عمیق، برای جلوگیری از خوانده شدن جزئيات حساس برنامه شما توسط دیگران. به هر حال، لاراول با حفاظت علیه اینگونه خطاها، برنامه بسیار امنتری را فراهم میکند.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید