فعال کردن Security Headers در لاراول

یکی از روش‌های مهم برای ارتقای امنیت برنامه‌های وب، استفاده از هدرهای امنیتی (Security Headers) است که به مرورگرها دستوراتی در مورد نحوه رفتار با منابع صفحه....

انتشار: , زمان مطالعه: 6 دقیقه
فعال کردن Security Headers در لاراول
دسته بندی: امنیت سایبری تعداد بازدید: 17

در دنیای توسعه وب، یکی از موارد مهمی که باید به آن توجه داشت، امنیت برنامه‌های وب است. یکی از روش‌های مهم برای ارتقای امنیت برنامه‌های وب، استفاده از هدرهای امنیتی (Security Headers) است که به مرورگرها دستوراتی در مورد نحوه رفتار با منابع صفحه ارائه می‌دهند. در این مقاله، ما به شما نشان خواهیم داد که چگونه می‌توانید هدرهای امنیتی مختلف را در لاراول با استفاده از یک Middleware پیاده‌سازی کنید.

ایجاد Middleware به نام SecurityHeaders

در لاراول، می‌توانیم از میان‌افزارها (Middleware) برای تغییر درخواست‌ها و پاسخ‌ها استفاده کنیم. در اینجا ما یک میان‌افزار ایجاد می‌کنیم که به پاسخ‌ها هدرهای امنیتی اضافه کند. ابتدا یک Middleware جدید به نام SecurityHeaders ایجاد می‌کنیم.

مراحل ایجاد Middleware

  1. ایجاد Middleware:

    ابتدا با استفاده از دستور زیر یک Middleware جدید به نام SecurityHeaders ایجاد کنید:

php artisan make:middleware SecurityHeaders
  1. پیاده‌سازی Security Headers:

کدی که باید در فایل SecurityHeaders.php  در تابع handle اضافه کنید به شرح زیر است:

//-------------------------------------------------------------------
// Programmer       : Ebrahim Shafiei (EbraSha)
// Email            : [email protected]
//-------------------------------------------------------------------


        // Process the request and get the response
        $response = $next($request);

        // Add X-XSS-Protection header to protect against cross-site scripting attacks
        $response->headers->set('X-XSS-Protection', '1; mode=block');

        // Add X-Content-Type-Options header to prevent MIME type sniffing
        $response->headers->set('X-Content-Type-Options', 'nosniff');

        // Add Strict-Transport-Security header to enforce HTTPS connections
        $response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');

        // Add Permissions-Policy header to restrict the use of certain browser features
        $response->headers->set('Permissions-Policy', 'microphone=()'); 

        // Add X-Frame-Options header to prevent clickjacking attacks
        $response->headers->set('X-Frame-Options', 'SAMEORIGIN');

        // Add Referrer-Policy header to control the referrer information sent with requests
        $response->headers->set('Referrer-Policy', 'no-referrer-when-downgrade');

        // Add Content-Security-Policy header to control which resources can be loaded
        $response->headers->set('Content-Security-Policy', "default-src 'self' https://alphajet.ir/ ; script-src 'self' blob: https://alphajet.ir/ 'unsafe-eval' 'unsafe-inline' https://alphajet.ir/ https://www.googletagmanager.com/ https://www.google-analytics.com/ ; style-src 'self' 'unsafe-inline' https://alphajet.ir/ ; img-src 'self' https://alphajet.ir/ data: ; connect-src 'self' https://alphajet.ir/ https://www.google-analytics.com/ ; font-src 'self' https://alphajet.ir/ ; object-src 'self' https://alphajet.ir/ ; media-src 'self' https://alphajet.ir/ http://dlhzstorage.com https://abdalcloud.ir ; frame-src 'self' ; form-action 'self';");

        // Return the response with the added security headers
        return $response;
  1. ثبت Middleware:

پس از ایجاد Middleware، در لاروال 10 و 9  باید آن را در فایل Kernel.php ثبت کنید. به فایل app/Http/Kernel.php بروید و کد زیر را به بخش $middlewareGroups یا $routeMiddleware اضافه کنید (بسته به نیاز شما که می‌خواهید این هدرها به تمام درخواست‌ها اعمال شوند یا فقط به برخی از آنها) چون ما می خواهیم همه درخواست ها با هدر های امنیتی انجام شود به صورت زیر عمل می کنیم :

  protected $middlewareGroups = [
        'web' => [
// Other middleware
            SecurityHeaders::class,
                ],

اما در  لاروال 11 به فایل bootstrap/app.php بروید و در بخش withMiddleware  کد زیر را وارد کنید.

//-------------------------------------------------------------------
// Programmer       : Ebrahim Shafiei (EbraSha)
// Email            : [email protected]
//-------------------------------------------------------------------

$middleware->append(\App\Http\Middleware\SecurityHeaders::class);

توضیحات هدرهای امنیتی

حال که هدرهای امنیتی اضافه شدند، بیایید توضیح دهیم هر کدام چه کاری انجام می‌دهند و چرا استفاده از آنها مهم است:

1. X-XSS-Protection

این هدر برای محافظت در برابر حملات Cross-Site Scripting (XSS) استفاده می‌شود. با تنظیم مقدار 1; mode=block، مرورگرها هنگام شناسایی حمله XSS، محتوای صفحه را بلوک می‌کنند تا حمله انجام نشود.

2. X-Content-Type-Options

این هدر برای جلوگیری از MIME-type sniffing استفاده می‌شود. مرورگرها با استفاده از این هدر از حدس زدن نوع فایل جلوگیری کرده و فقط به نوعی که از طرف سرور ارسال شده است اعتماد می‌کنند. این امر می‌تواند جلوی برخی حملات را بگیرد که با تغییر نوع MIME انجام می‌شوند.

3. Strict-Transport-Security (HSTS)

این هدر مرورگر را ملزم می‌کند که همیشه از HTTPS برای برقراری ارتباط با سرور استفاده کند. همچنین، مدت زمان این سیاست از طریق مقدار max-age=31536000 تنظیم می‌شود که به معنای یک سال است. استفاده از includeSubDomains نیز تضمین می‌کند که این سیاست برای تمامی زیر دامنه‌ها اعمال شود.

4. Permissions-Policy

این هدر جدید به توسعه‌دهندگان امکان می‌دهد دسترسی به ویژگی‌ها و API‌های خاص مرورگر، مانند میکروفون، دوربین، و ژیروسکوپ، را محدود کنند. در اینجا ما دسترسی به میکروفون را غیرفعال کرده‌ایم.

5. X-Frame-Options

این هدر برای جلوگیری از حملات Clickjacking استفاده می‌شود. با تنظیم مقدار SAMEORIGIN، اطمینان حاصل می‌شود که صفحه فقط در فریم‌های متعلق به همان دامنه قرار می‌گیرد.

6. Referrer-Policy

این هدر کنترل می‌کند که اطلاعات Referrer (آدرس صفحه مبدأ) در درخواست‌های بعدی چگونه ارسال شود. مقدار no-referrer-when-downgrade به این معناست که اطلاعات Referrer فقط زمانی ارسال می‌شود که درخواست به یک صفحه امن (HTTPS) برود و نه زمانی که به یک صفحه غیر امن (HTTP) برود.

7. Content-Security-Policy (CSP)

این یکی از مهم‌ترین هدرهای امنیتی است که برای محافظت در برابر XSS و Injection استفاده می‌شود. CSP سیاست‌هایی را تعریف می‌کند که مرورگرها باید هنگام بارگیری منابع مانند اسکریپت‌ها، استایل‌ها و تصاویر دنبال کنند. مقادیر این هدر باید دقیقاً با منابعی که واقعاً به آنها نیاز دارید تنظیم شوند تا کمترین ریسک امنیتی را داشته باشید.

برای مثال:

  • default-src 'self' مشخص می‌کند که تمام منابع پیش‌فرض باید از همان دامنه بارگیری شوند.
  • script-src 'self' 'unsafe-inline' اجازه می‌دهد اسکریپت‌ها از خود دامنه و همچنین از منابع مشخص‌شده (مثل https://alphajet.ir/) بارگذاری شوند.
  • style-src 'self' 'unsafe-inline' به استایل‌های داخلی و همچنین منابع خارجی اجازه می‌دهد بارگذاری شوند.
  • connect-src, font-src, و img-src منابعی مانند فونت‌ها و تصاویر را مشخص می‌کنند که از کجا بارگذاری شوند.

در قسمت Content-Security-Policy (CSP)، دامنه‌ای که مجاز است منابع (مانند اسکریپت‌ها، استایل‌ها، تصاویر و سایر محتواها) را بارگذاری کند، مشخص می‌شود. به همین دلیل، باید به جای https://alphajet.ir/ دامنه‌ی خودتان را وارد کنید تا از منابع مربوط به دامنه‌ی خودتان استفاده کنید.

چگونه دامنه خود را جایگزین کنید؟

به‌راحتی می‌توانید تمام جاهایی که https://alphajet.ir/ وارد شده را با دامنه‌ی خودتان جایگزین کنید.همچنین، اگر سایت شما از منابع دیگری (مثل گوگل آنالیتیکس یا گوگل تگ منیجر) استفاده می‌کند، حتماً آن منابع را در لیست CSP خودتان بگذارید تا مرورگر اجازه دهد آنها بارگذاری شوند.


دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)