Content security policy وردپرس

Content Security Policy وردپرس: راهنمای جامع پیکربندی CSP و افزایش امنیت سایت

در دنیای دیجیتال امروز، امنیت وب به یکی از اساسی‌ترین ستون‌های موفقیت هر کسب و کار آنلاین تبدیل شده است. وردپرس به عنوان محبوب‌ترین سیستم مدیریت محتوا، هدف اصلی بسیاری از حملات سایبری قرار دارد. برای جلوگیری از نفوذ کدهای مخرب و حملات اسکریپت‌نویسی بین سایتی (XSS)، داشتن یک Content Security Policy (CSP) یا «سیاست امنیت محتوا» یک ضرورت انکارناپذیر است. در این مقاله علمی و کاربردی، به‌صورت کاملاً عملی یاد می‌گیرید که چگونه CSP را در وردپرس راه‌اندازی کنید تا جلوی بارگیری منابع نامعتبر را بگیرید.

⚡ نگاهی سریع به نقشه راه CSP در وردپرس (خلاصه مدیریتی)

۱. تعریف CSP
هدر امنیتی مرورگر برای محدود کردن منابع مجاز نفوذ مانند JS و CSS.

۲. هدف اصلی
مسدودسازی کامل حملات XSS، تزریق اسکریپت و Clickjacking.

۳. روش تست
فعال‌سازی حالت Report-Only برای شناسایی خطاهای خطرساز بدون اختلال در سایت.

۴. پیاده‌سازی
ارسال هدرها از طریق htaccess.، فایل functions.php یا افزونه‌های امنیتی.

فهرست عناوین این مقاله

  • سیاست امنیت محتوا (CSP) چیست و چگونه کار می‌کند؟
  • چرا سایت‌های وردپرسی به CSP نیاز مبرم دارند؟
  • دستورات و دایرکتیوهای اصلی در Content Security Policy
  • روش‌های پیاده‌سازی CSP در وردپرس (با کد و افزونه)
  • استفاده از حالت Report-Only جهت جلوگیری از شکستن قالب
  • جدول مقایسه روش‌های اجرا و سطح امنیت
  • بخش عیب‌یابی سریع (Troubleshooting)
  • سوالات متداول (FAQ)

سیاست امنیت محتوا (CSP) چیست و چگونه کار می‌کند؟

سیاست امنیت محتوا (CSP) چیست و چگونه کار می‌کند؟
تعریف کوتاه برای Featured Snippet:
سیاست امنیت محتوا (Content Security Policy) یک لایه امنیتی افزوده‌شده به مرورگرهاست که با مشخص کردن دامنه و منابع مجاز برای بارگیری فایل‌های اسکریپت، استایل، تصویر و فونت، از بروز حملاتی مانند XSS و Data Injection جلوگیری می‌کند.

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

با تعریف هدرهای CSP در پاسخ‌های HTTP سرور، شما به مرورگر می‌گویید: «تنها کدهایی را اجرا کن که از دامنه‌های مشخص شده توسط من دانلود شده باشند». اگر کدی از دامنه ناشناخته ارسال شود، مرورگر بلافاصله اجرای آن را بلوکه می‌کند. اگر به دنبال حفظ امنیت جامع هستید، حتماً اصول پایه موجود در دسته‌بندی امنیت سایت را بررسی کنید تا زیرساخت سرور شما کاملاً مقاوم باشد.

چرا سایت‌های وردپرسی به CSP نیاز مبرم دارند؟

چرا سایت‌های وردپرسی به CSP نیاز مبرم دارند؟

سیستم وردپرس بر پایه افزونه‌ها و پوسته‌های متنوع بنا شده است. این تنوع در کنار تمام مزایا، یک چالش امنیتی بزرگ ایجاد می‌کند. وجود یک پلاگین قدیمی یا غیراستاندارد می‌تواند راه را برای نفوذ هکرها باز کند. رعایت نکات مهم امنیتی وردپرس در کنار ابزارهای ساختاری، ضریب نفوذپذیری را به حداقل ممکن می‌رساند.

مهم‌ترین دلایلی که باید همین امروز CSP را در وردپرس تنظیم کنید شامل موارد زیر است:

  • مقابله با حملات Cross-Site Scripting (XSS): شایع‌ترین حمله در وردپرس که در آن اسکریپت‌های ناشناس در بخش دیدگاه‌ها یا فرم‌ها تزریق می‌شوند.
  • جلوگیری از Clickjacking: جلوگیری از بارگذاری سایت شما در فریم‌های نامرئی سایت‌های دیگر جهت فریب کاربران.
  • ارتقای امتیاز سئو و تجربه کاربری: موتورهای جستجو و ابزارهایی مانند Google Lighthouse به سایت‌هایی که هدرهای امنیتی مدرن دارند امتیاز بالاتری می‌دهند. این امر در کنار تکنیک‌های ارتقای سئو سایت موجب جلب اعتماد بیشتر گوگل خواهد شد.
  • کنترل بر منابع بارگیری‌شده: اطمینان از این‌که کدهای تبلیغاتی یا آمارگیرهای غیرمجاز روی سایت شما اجرا نمی‌شوند.

دستورات و دایرکتیوهای اصلی در Content Security Policy

دستورات و دایرکتیوهای اصلی در Content Security Policy

یک هدر CSP از مجموعه دستوراتی (Directives) تشکیل شده که تک‌تک آن‌ها وظیفه کنترل بخش خاصی از منابع را بر عهده دارند. در ادامه با مهم‌ترین دایرکتیوها آشنا می‌شویم:

  • 📌 default-src: مقدار پیش‌فرض برای تمام منابعی که دایرکتیو اختصاصی ندارند.
  • 📌 script-src: تعیین دامنه‌های مجاز برای دریافت و اجرای فایل‌های JavaScript.
  • 📌 style-src: مشخص‌کننده منابع معتبر برای فایل‌های استایل CSS.
  • 📌 img-src: دامنه‌های معتبر برای بارگذاری تصاویر.
  • 📌 font-src: منابع مجاز برای دانلود فونت‌های وب (مثل گوگل فونت).
  • 📌 connect-src: دامنه‌هایی که اتصالات REST API، WebSocket و AJAX به آن‌ها مجاز است.
  • 📌 frame-ancestors: مشخص می‌کند چه سایت‌هایی می‌توانند صفحه شما را در iframe قرار دهند (برای جلوگیری از Clickjacking).

روش‌های پیاده‌سازی CSP در وردپرس (با کد و افزونه)

پیاده‌سازی Content Security Policy در وردپرس به روش‌های مختلفی امکن‌پذیر است. انتخاب روش مناسب بستگی به میزان تسلط فنی شما به مدیریت سرور و کدنویسی وردپرس دارد. همچنین اگر نیاز به توسعه اختصاصی قالب یا افزونه دارید، می‌توانید از خدمات طراحی وب‌سایت پروژه‌ای استفاده کنید.

روش اول: افزودن هدر از طریق htaccess. (پیشنهادی برای سرورهای Apache و Litespeed)

این روش بسیار سریع است زیرا هدرها قبل از اجرا شدن کدهای PHP وردپرس توسط خود سرور ارسال می‌شوند. برای این کار فایل .htaccess را در ریشه هاست باز کرده و کدهای زیر را قرار دهید:

<IfModule mod_headers.c>
    Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.google-analytics.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com;"
</IfModule>

روش دوم: استفاده از فایل functions.php پوسته

اگر دسترسی به فایل‌های پیکربندی سرور ندارید، می‌توانید کدهای PHP زیر را به فایل functions.php قالب فعال یا یک افزونه اختصاصی اضافه کنید:

function add_csp_security_header() {
    header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline'; img-src 'self' data:;");
}
add_action('send_headers', 'add_csp_security_header');

روش سوم: استفاده از افزونه‌های امنیت وردپرس

اگر تمایلی به دستکاری کدها ندارید، می‌توانید از ابزارهای امنیتی قدرتمند مثل Sucuri Security یا افزونه‌های اختصاصی مانند HTTP Headers استفاده کنید. این پلاگین‌ها رابط گرافیکی ساده‌ای برای درج دایرکتیوها در اختیار شما قرار می‌دهند. ضمناً برای بالا بردن امنیت لایه‌های دیگر، توصیه می‌شود همزمان اقدامی جهت تغییر آدرس ورود به مدیریت وردپرس انجام دهید تا پنل اصلی از دید روبات‌های مخرب مخفی بماند.

استفاده از حالت Report-Only جهت جلوگیری از شکستن قالب

بزرگ‌ترین خطری که در زمان درج تنظمیات CSP وجود دارد، شکستن چیدمان سایت یا از کار افتادن کدهای جاوااسکریپت افزونه‌هاست. اگر قوانین را بیش از حد سخت‌گیرانه تنظیم کنید، ممکن است برخی بخش‌های سایت بارگذاری نشوند.

برای حل این مشکل، مرورگرها هدر دیگری به نام Content-Security-Policy-Report-Only ارائه می‌دهند. در این حالت، هیچ منبعی مسدود نمی‌شود؛ اما خطاهای مربوط به عدم تطابق منابع در کنسول مرورگر ثبت شده یا به یک آدرس گزارش‌گیری ارسال می‌گردد.

Header set Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' https://trustedscripts.example.com; report-uri /csp-violation-report-endpoint/"

جدول مقایسه روش‌های اجرا و سطح امنیت

روش پیاده‌سازی میزان کارایی و امنیت
پیکربندی از طریق htaccess. پایداری بسیار بالا، عدم مصرف منابع PHP، اجرای سریع در سطح سرور.
درج کد در functions.php مناسب برای توسعه‌دهندگان، نیاز به دقت بالا جهت جلوگیری از خطای PHP.
استفاده از پلاگین‌ها بسیار ساده برای افراد مبتدی، اما دارای بار پردازشی اندک روی دیتابیس.
حالت Report-Only امن‌ترین روش برای تست اولیه بدون ریسک خرابی ظاهری وب‌سایت.

بخش عیب‌یابی سریع (Troubleshooting)

پس از فعال‌سازی CSP ممکن است با مشکلاتی مواجه شوید. در این بخش راه‌حل مشکلات رایج را با هم مرور می‌کنیم:

۱. خطای Refused to load the script در کنسول مرورگر

علت: افزونه یا قالبی می‌خواهد اسکریپتی را از دامنه‌ای خارج از لیست مجاز بارگیری کند.
راه‌حل: آدرس دامنه مسدودشده را پیدا کرده و به بخش script-src در هدر خود اضافه کنید.

۲. بهم ریختگی فونت‌ها یا عدم نمایش آیکون‌ها

علت: عدم مجوز بارگذاری فونت از CDNهایی مثل FontAwesome یا Google Fonts.
راه‌حل: دایرکتیو font-src را با اضافه کردن آدرس CDN موردنظر به‌روزرسانی کنید.

۳. عدم کارکرد Inline Scripts (اسکریپت‌های درون‌برنامه‌ای)

علت: CSP به‌صورت پیش‌فرض کدهای جاوااسکریپتی که مستقیم بین کدهای HTML قرار دارند را مسدود می‌کند.
راه‌حل: عبارت 'unsafe-inline' را به script-src اضافه کنید یا از مقدار Nonce/Hash استفاده نمایید.

سوالات متداول (FAQ)

آیا تنظیم Content Security Policy سرعت وردپرس را کاهش می‌دهد؟

خیر، هدرهای CSP تنها چند بایت متن هستند که همراه با پاسخ HTTP ارسال می‌شوند و حجم بسیار ناچیزی دارند. در واقع با مسدود کردن کدهای سنگین یا جاسوسی ناشناس، می‌توانند سرعت مرورگر را افزایش دهند.

عبارت unsafe-inline چیست و آیا استفاده از آن خطرناک است؟

عبارت 'unsafe-inline' اجازه اجرای کدهای جاوااسکریپت یا CSS درج‌شده به‌صورت مستقیم در HTML را می‌دهد. اگرچه امنیت کامل بدون این عبارت به دست می‌آید، اما بیشتر قالب‌ها و افزونه‌های وردپرس به کدهای اینلاین وابسته هستند و بدون آن ممکن است از کار بیفتند.

چگونه مطمئن شوم هدر CSP به‌درستی روی سایت فعال شده است؟

می‌توانید کلید F12 را در مرورگر زده، به تب Network بروید و با کلیک روی اولین درخواست (آدرس سایت)، در بخش Response Headers وجود Content-Security-Policy را بررسی کنید. همچنین سایت‌های آنلاینی مثل securityheaders.com این کار را به‌صورت خودکار انجام می‌دهند. برای کسب اطلاعات بیشتر می‌توانید مراجعه به صفحه اصلی مهیار هاب را مد نظر داشته باشید.

Table of Contents

آخرین نوشته‌ها