איך מוסיפים Content-Security-Policy (CSP) לאתר

CSP היא ההגנה החזקה ביותר מפני XSS: היא קובעת מאילו מקורות האתר רשאי לטעון סקריפטים, עיצובים ותמונות. כך גם אם תוקף מצליח להזריק קוד, הדפדפן לא מריץ אותו.

חשוב: המדיניות default-src 'self' שבדוגמה חוסמת כל מה שנטען מאתרים אחרים — Google Analytics, פונטים, צ׳אט, תשלומים. התחילו בכותרת Content-Security-Policy-Report-Only עם אותו ערך, בדקו בקונסולה מה נחסם, הוסיפו את המקורות הנחוצים, ורק אז עברו לכותרת האוכפת.

איך מתקנים, לפי הפלטפורמה שלכם

WordPress

איפה: הקובץ functions.php של ערכת העיצוב (או תוסף לקטעי קוד)

add_action('send_headers', function () {
  header("Content-Security-Policy: default-src 'self'");
});

WordPress שולח את הכותרת Content-Security-Policy בכל טעינת עמוד.

איך בודקים שזה עבד: טענו מחדש את האתר ובדקו שכותרות התגובה כוללות את `Content-Security-Policy`.

Cloudflare

איפה: לוח הבקרה של Cloudflare: Rules ← Transform Rules ← Modify Response Header ← Add

Set static  —  Header name: Content-Security-Policy  —  Value: default-src 'self'

Cloudflare מוסיף את הכותרת Content-Security-Policy בשרתי הקצה שלו, בלי שינוי בשרת שלכם.

איך בודקים שזה עבד: טענו מחדש את האתר ובדקו שכותרות התגובה כוללות את `Content-Security-Policy`.

Vercel / Next.js

איפה: הקובץ next.config.js, בתוך הפונקציה async headers()

module.exports = {
  async headers() {
    return [{ source: "/(.*)", headers: [
      { key: "Content-Security-Policy", value: "default-src 'self'" },
    ]}];
  },
};

Next.js שולח את הכותרת Content-Security-Policy בכל נתיב.

איך בודקים שזה עבד: טענו מחדש את האתר ובדקו שכותרות התגובה כוללות את `Content-Security-Policy`.

Netlify

איפה: קובץ `_headers` בתיקיית הפרסום (או netlify.toml)

/*
  Content-Security-Policy: default-src 'self'

Netlify מוסיף את הכותרת Content-Security-Policy לכל הנתיבים (`/*`).

איך בודקים שזה עבד: טענו מחדש את האתר ובדקו שכותרות התגובה כוללות את `Content-Security-Policy`.

Nginx

איפה: nginx.conf — בתוך הבלוק `server { }`, ואז טענו מחדש את nginx

add_header Content-Security-Policy "default-src 'self'" always;

מוסיף את הכותרת Content-Security-Policy לכל תגובה.

איך בודקים שזה עבד: טענו מחדש את האתר ובדקו שכותרות התגובה כוללות את `Content-Security-Policy`.

Apache

איפה: .htaccess (או הגדרות ה-vhost), ואז הפעילו מחדש את Apache

Header always set Content-Security-Policy "default-src 'self'"

מוסיף את הכותרת Content-Security-Policy דרך mod_headers.

איך בודקים שזה עבד: טענו מחדש את האתר ובדקו שכותרות התגובה כוללות את `Content-Security-Policy`.

IIS

איפה: web.config — בתוך <system.webServer><httpProtocol><customHeaders>

<add name="Content-Security-Policy" value="default-src 'self'" />

מוסיף את הכותרת Content-Security-Policy ב-IIS.

איך בודקים שזה עבד: טענו מחדש את האתר ובדקו שכותרות התגובה כוללות את `Content-Security-Policy`.

שרת האתר שלכם

איפה: הגדרות כותרות התגובה בשרת האתר שלכם

Content-Security-Policy: default-src 'self'

הגדירו את השרת או את ה-CDN לשלוח את הכותרת הזו בכל תגובה.

איך בודקים שזה עבד: טענו מחדש את האתר ובדקו שכותרות התגובה כוללות את `Content-Security-Policy`.

לא בטוחים אם האתר שלכם צריך את התיקון הזה? הסריקה בודקת את זה ועוד עשרות דברים, ומראה מה חסר אצלכם.

לסריקה חינמית של האתר

מדריכים קשורים