فعال کردن Security Headers در لاراول
یکی از روشهای مهم برای ارتقای امنیت برنامههای وب، استفاده از هدرهای امنیتی (Security Headers) است که به مرورگرها دستوراتی در مورد نحوه رفتار با منابع صفحه....
لیست مطالب
در دنیای توسعه وب، یکی از موارد مهمی که باید به آن توجه داشت، امنیت برنامههای وب است. یکی از روشهای مهم برای ارتقای امنیت برنامههای وب، استفاده از هدرهای امنیتی (Security Headers) است که به مرورگرها دستوراتی در مورد نحوه رفتار با منابع صفحه ارائه میدهند. در این مقاله، ما به شما نشان خواهیم داد که چگونه میتوانید هدرهای امنیتی مختلف را در لاراول با استفاده از یک Middleware پیادهسازی کنید.
ایجاد Middleware به نام SecurityHeaders
در لاراول، میتوانیم از میانافزارها (Middleware) برای تغییر درخواستها و پاسخها استفاده کنیم. در اینجا ما یک میانافزار ایجاد میکنیم که به پاسخها هدرهای امنیتی اضافه کند. ابتدا یک Middleware جدید به نام SecurityHeaders ایجاد میکنیم.
مراحل ایجاد Middleware
-
ایجاد Middleware:
ابتدا با استفاده از دستور زیر یک Middleware جدید به نام
SecurityHeaders
ایجاد کنید:
php artisan make:middleware SecurityHeaders
- پیادهسازی 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;
- ثبت 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 خودتان بگذارید تا مرورگر اجازه دهد آنها بارگذاری شوند.
دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)