7 نکته کلیدی برای ایمن سازی لاراول

7 نکته کلیدی برای ایمن سازی لاراول

تیم قدرتمند لاراول همواره ویژگی های امنیتی بسیاری در نسخه های مختلف آن به خصوص 5، پیش بینی کرده و همواره در حال بروزرسانی است. با این حال هنوز راه هایی برای سوء استفاده وجود دارد که در صورت عدم توجه به آن هها ممکن است پروژه لاراولی شما مورد نفوذ قرار گیرد. در این مقاله ضمن تشریح ویژگی های امنیتی لاراول، به 7 نکته طلایی در ایمن سازی و ارتقا امنیت لاراول پرداخته ایم، اینکه چگونه می توانیم Laravel را امن و بیش از پیش قابل اعتماد کنیم…

هاست لاراول هاست حرفه‌ای لینوکس با قابلیت پشتیبانی از لاراول

 

1- جلوگیری از حملات SQL Injection

با توجه به اینکه لاراول به طور پیشفرض از PDO برای اجرای Queryهای سمت دیتابیس استفاده می کند بنابراین تا حد بسیار زیادی ورودی ها را بررسی و از عدم تزریق متغیر ناخواسته اطمینان حاصل می کند. اما گاها برخی از برنامه نویسان قصد دارند به جای استفاده از PDO از متد DB::raw استفاده کنند، در این صورت دیگر PDO نمی تواند همانند شرایط قبل از عدم تزریق متغیر ناخواسته اطمینان حاصل کند. اینجاست که لاراول در برابر SQL Injection آسیب پذیر می شود.
معمولا کاربران از نمونه زیر در این بخش استفاده می کنند:

Route::get('sql-injection-vulnerable', function() {
$name = "'Bobby' OR 1=1";
return DB::select(
DB::raw("SELECT * FROM cats WHERE name = $name"));
});

حال اینکه جهت ایمن سازی آن لازم است نمونه بالا را با جایگزینی پارامترها با علامت سوال (؟) به شکل زیر بازنویسی کنید. در این روش مقادیر در یک آرایه به عنوان یک آرگومان دوم و به روش خام به دیتابیس ارسال می شوند:

Route::get('sql-injection-not-vulnerable', function() {
$name = "'Bobby' OR 1=1";
return DB::select(
DB::raw("SELECT * FROM cats WHERE name = ?", [$name]));
});

 

2- فعال سازی SSL و پروتکل HTTPS

قبلا در مقالاتی دیگر به اهمیت استفاده از پروتکل HTTPS اشاره کرده ایم:

بیشتر بخوانید SSL و تاثیرات آن‌ بر روی وبسایت

بیشتر بخوانید ضرب الاجل گوگل برای فعال سازی https و SSL

هنگامی که شما وبسایت خود را در بستر HTTP توسعه می دهید هر بیت از اطلاعات در شبکه ارتباطی سرور و مخاطبین به صورت متن ساده و قابل فهم ارسال می شود. بنابراین یک هکر می تواند اطلاعات دریافتی از سرور را تشخیص داده و از آن ها سوء استفاده کند. تنها راه جلوگیری از این اتفاق تهیه گواهینامه SSL و فعال سازی پروتکل HTTPS است.

گواهینامه SSL برای تهیه و خرید گواهینامه SSL کلیک کنید

نکته قابل توجه اینکه، طبق الگوریتم های جدید موتورهای جستجوگر از جمله Google وبسایت های برخوردار از HTTPS از درجه اهمیت بالاتر و SEO قوی تری بهره مند هستند. بنابراین با یک تیر 2 نشان میزنید. تامین امنیت و ارتقا SEO.

با تهیه گواهینامه SSL و فعال کردن HTTPS، لازم است با استفاده از نمونه فیلتر زیر، کاربران خود را به پروتکل امن HTTPS هدایت کنید:

Route::filter('https', function() {
if ( ! Request::secure())
return Redirect::secure(URI::current());
});

 

3- جلوگیری از حملات XSS

حمله XSS زمانی اتفاق می افتد که به عنوان مثال مهاجم بتواند یک کد جاوا اسکریپت در صفحه ای که کاربران آن را مشاهده می کنند، قرار دهد. فرض کنید در صفحه ای از وبسایت یک فرم قرار گرفته که نام و نام وخانوادگی را درخواست می کند. حال چنانچه فرد مهاجم یک کد جاوا اسکریپت به شرح زیر در فیلد نام و نام خانوادگی قرار دهد و دکمه Submitt را اعمال کند. آن کد در صفحه دیگر کاربران آنلاین اجرا شده و در مثال ما پیام هک شدن وبسایت به کاربران وبسایت نمایش داده می شود:

<script>alert("You are hacked")</script>

این حفره امنیتی نه تنها می تواند مانند مثال بالا باعث نمایش یک جمله با محتوای منفی و بسیار بد شود بلکه می تواند اقدامی جهت اتصال به دیگر سرورها جهت اقدامات خرابکانه دیگر باشد. پس اگر از لاراول استفاده می کنید در بخش مقدار، کد را به شکل ({{ $variable }}) وارد کنید.
تنها زمانی از کد {!! $variable !!} استفاده کنید که اطمینان دارید محتوای فیلد بهتر است در معرض نمایش عموم قرار گیرد.

کارآمدترین روش مقابله با حملات اینگونه این است که هر بار که فرم نمایش داده می شود یک نشانه یا Token ایجاد شود که در هنگام Submitt بررسی و تطبیق داده شود. Form::open and Form::model هر دو به طور خودکار یک _token مخفی وارد می کنند و middleware مقدار این Token را در هنگام ثبت اطلاعات مطابقت می دهد. اگر Token همان بود که اطلاعات ارسال می شوند در غیر اینصورت از ارسال اطلاعات و در نتیجه اجرای کد تزریق شده در فرم جلوگیری می شود.

البته لاراول در نسخه 5 به طور خودکار از در این بخش ایمن شده است و لذا چنانچه فرم بخواهد اطلاعات را به دیتابیس ارسال کند یا خروجی آن در قالب HTML باشد کد مثال ما را به شکل زیر ارسال می کند که در واقع یک متن بدون قابلیت اجراییست:

&lt;script&gt;alert("You are hacked")&lt;/script&gt;

جهت اطلاعات بیشتر در مورد این بروزرسانی به این لینک مراجعه کنید.
 

4- استفاده از هدر (Header)های امنیتی Laravel

توصیه می شود از هدرهای امنیتی لاراول موجود در GitHub استفاده کنید. با مراجعه به لینک زیر لیستی از Headerها و نحوه نصب و اضافه کردن آن ها به لاراول را مشاهده خواهید کرد.
هدرهای امنیتی لاراول در GitHub
پس از نصب و اضافه کردن هدرهای امنیتی، فراموش نکنید که نتیجه را در مرورگر تست کنید. برای اینکار حتی می توانید به سادگی با مراجعه به لینک زیر نسبت به تست فرایند اقدام کنید:
تست Security Header
 

5- استفاده از mass assignment با ملاحظات امنیتی

mass assignment یک ویژگی ساده است که به ما اجازه می دهد یک مدل مشخص برای ورودی فرم ایجاد کنیم. در این صورت نیاز نیست برای هر مقدار به صورت جداگانه اقدام کنیم.
اگر از این قابلیت در اپلیکیشن یا وبسایت خود استفاده کرده اید باید مراقب باشید که ملاحظات امنیتی آن را نیز رعایت کرده باشید در غیر اینصورت، هکر می تواند فرم را در طرف کاربر تغییر دهد و یک ورودی جدید به آن اضافه کند:

<input name="is_admin" type="text" value="1" />

در واقع از کد زیر پس از Submit فرم جهت ایجاد مدل استفاده می شود:

Cat::create(Request::all())

البته به لطف آرایه $fillable، می توانید یک White List حاوی فیلدهایی که می توانند با استفاده از قابلیت mass assignment پر شوند، ایجاد کنید. بر عکس این فرایند می تواند با استفاده از ویژگی $guarded یک Black List حاوی فیلدهایی که نمی توانند از قابلیت mass assignment استفاده کنند، بسازید.
 

6- محافظت در مقابل CSRF (Cross Site Request Forgery)

در بخش پایانی جلوگیری از حملات XSS یک پیشنهاد ارایه کردیم و آن استفاده از Token برای اعتبار سنجی ورودی فیلدهای یک فرم بود.
اگر برای ایجاد فرم از قالب های Blade در بستر HTML استفاده کرده اید، هر چند که این روش توصیه نمی شود اما حال که استفاده کردید باید برای استفاده از قابلیت CSRF token از کد زیر در فرم خود استفاده کنید:

<form name="test">
{!! csrf_field() !!}
<!-- Other inputs can come here-->
</form>
اما اگر برای ایجاد فرم از روش توصیه شده LaravelCollective/html استفاده کرده اید و Laravel شما نسخه 5 است، خوشحال باشید. چراکه CSRF token به طور خودکار فعال شده و فرایند لازم را در اعتبار سنجی ورودی ها انجام می دهد.

 

7- استفاده از Laravel Purifier

Raw HTML یک فایل خام html است که در آن از تگ هایی استفاده شده که در هیچ یک از زبان های برنامه نویسی نشانه گذاری شده تعریف نشده است. بنابراین امکان مخرب بودن محتوای این نوع فایل بسیار زیاد است. پسوندهای این فایل معمولا یکی از موارد asp, .php, .aspx, .cfs است.
برای جلوگیری از وجود فایل های اینگونه در وبسایت خود توصیه می شود از Laravel Purifier استفاده کنید. در این صورت فایل های حاوی کدهای ناشناس و مخرب شناسایی و حذف خواهند شد.
برای کسب اطلاعات بیشتر در مورد HTML Laravel Purifier به لینک زیر مراجعه کنید:
purifier-security
 

منابع
درباره نویسنده
سجاد ابراهیمی
سجاد سالهاست که در حوزه وب هاستینگ و مدیریت سرور فعالیت می کند، او عاشق طبیعت، کوه نوردی و طراحی گرافیک هست و سعی می کند به عنوان هماهنگ کننده در های‌ساپورت بهترین ها را برای کاربران فراهم کند.
4 دیدگاه برای “7 نکته کلیدی برای ایمن سازی لاراول
  1. علی - 27 اردیبهشت, 1398 at 12:07 ق.ظ

    سلام خسته نباشید
    یه سوال ؛ اگه در یک فرم ثبت نام به جای نام ، شخصی بیاد اسکریپت بفرسته ، عکس العمل لاراول پس از ارسال فرم چیه ؟ حالات گوناگونش بررسی کنید لطفا

    پاسخ
    • سجاد ابراهیمی - 28 اردیبهشت, 1398 at 12:28 ب.ظ

      عرض سلام و ادب،
      در بندهای 3 و 6 به موضوع مورد نظر شما پرداخته شده است. لطفا دو بند فوق را مطالعه فرمایید.

      پاسخ
  2. میلاد - 16 تیر, 1400 at 9:42 ق.ظ

    عالی بود ممنون بابت پستتون

    پاسخ

دیدگاه خود را ارسال کنید