{"id":25895,"date":"2026-09-21T10:00:00","date_gmt":"2026-09-21T08:00:00","guid":{"rendered":"https:\/\/soccorsowp.it\/blog\/?p=25895"},"modified":"2026-09-21T10:00:00","modified_gmt":"2026-09-21T08:00:00","slug":"content-security-policy-csp-wordpress","status":"publish","type":"post","link":"https:\/\/soccorsowp.it\/blog\/content-security-policy-csp-wordpress\/","title":{"rendered":"Come proteggere WordPress con il Content Security Policy (CSP)"},"content":{"rendered":"<h1>Come proteggere WordPress con il Content Security Policy (CSP)<\/h1>\n<p>Il <strong>Content Security Policy (CSP)<\/strong> \u00e8 un header di sicurezza HTTP che protegge il tuo sito <a href=\"https:\/\/soccorsowp.it\/blog\/blocco-di-contenuti-opt-in-per-wordpress\/\">WordPress<\/a> da attacchi come <strong>Cross-Site Scripting (XSS)<\/strong>, clickjacking e data injection. Definisce quali risorse (script, stili, immagini, font) possono essere caricate nel browser dei visitatori e da quali origini. In questa guida ti spiego come funziona il CSP e come implementarlo su WordPress senza rompere il sito.<\/p>\n<h2>Come funziona il Content Security Policy<\/h2>\n<p>Quando un browser carica una pagina del tuo sito, il CSP gli dice esattamente <strong>da dove pu\u00f2 caricare le risorse<\/strong>. Se uno script malevolo viene iniettato nella pagina (ad esempio tramite un attacco XSS), il browser lo blocca perch\u00e9 non proviene da un&#8217;origine autorizzata.<\/p>\n<p>Il CSP viene inviato come header HTTP nella risposta del server:<\/p>\n<pre>Content-Security-Policy: default-src 'self'; script-src 'self' https:\/\/cdn.esempio.com;<\/pre>\n<p>Questa policy dice al browser: &#8220;Carica le risorse solo dal dominio del sito (<span style=\"font-family: monospace\">&#8216;self&#8217;<\/span>) e gli script anche da <span style=\"font-family: monospace\">cdn.esempio.com<\/span>. Blocca tutto il resto.&#8221;<\/p>\n<h2>Le direttive principali del CSP<\/h2>\n<p>Il CSP si compone di diverse <strong>direttive<\/strong>, ognuna che controlla un tipo di risorsa:<\/p>\n<ul>\n<li><strong>default-src:<\/strong> fallback per tutte le risorse non specificate da altre direttive.<\/li>\n<li><strong>script-src:<\/strong> origini autorizzate per i file JavaScript. La pi\u00f9 importante per prevenire XSS.<\/li>\n<li><strong>style-src:<\/strong> origini autorizzate per i fogli di stile CSS.<\/li>\n<li><strong>img-src:<\/strong> origini autorizzate per le immagini.<\/li>\n<li><strong>font-src:<\/strong> origini autorizzate per i web font.<\/li>\n<li><strong>connect-src:<\/strong> origini autorizzate per le connessioni AJAX, WebSocket e fetch.<\/li>\n<li><strong>frame-src:<\/strong> origini autorizzate per iframe e embed.<\/li>\n<li><strong>media-src:<\/strong> origini autorizzate per audio e video.<\/li>\n<li><strong>object-src:<\/strong> controlla plugin come Flash. Imposta sempre <span style=\"font-family: monospace\">&#8216;none&#8217;<\/span>.<\/li>\n<\/ul>\n<p>I valori comuni sono: <span style=\"font-family: monospace\">&#8216;self&#8217;<\/span> (stesso dominio), <span style=\"font-family: monospace\">&#8216;none&#8217;<\/span> (blocca tutto), <span style=\"font-family: monospace\">&#8216;unsafe-inline&#8217;<\/span> (permette stili e script inline), URL specifici dei CDN e servizi esterni.<\/p>\n<h2>Perch\u00e9 il CSP \u00e8 complicato su WordPress<\/h2>\n<p>WordPress, i temi e molti plugin usano ampiamente <strong>stili e script inline<\/strong> e funzioni come <span style=\"font-family: monospace\">wp_add_inline_style()<\/span> e <span style=\"font-family: monospace\">wp_add_inline_script()<\/span>. Questo rende difficile creare un CSP restrittivo perch\u00e9 dovresti usare <span style=\"font-family: monospace\">&#8216;unsafe-inline&#8217;<\/span> per non rompere il sito.<\/p>\n<p>Inoltre, WordPress carica risorse da diverse origini:<\/p>\n<ul>\n<li><strong>Google Fonts<\/strong> (fonts.googleapis.com e fonts.gstatic.com)<\/li>\n<li><strong>Google Analytics \/ Tag Manager<\/strong> (googletagmanager.com, google-analytics.com)<\/li>\n<li><strong>CDN<\/strong> (cdnjs.cloudflare.com, cdn.jsdelivr.net)<\/li>\n<li><strong>Servizi embed<\/strong> (youtube.com, vimeo.com, twitter.com)<\/li>\n<li><strong>Gravatar<\/strong> (secure.gravatar.com)<\/li>\n<\/ul>\n<p>Ogni servizio esterno deve essere esplicitamente autorizzato nel CSP.<\/p>\n<h2>Implementare il CSP gradualmente<\/h2>\n<p>Non implementare un CSP restrittivo tutto in una volta: romperesti quasi certamente qualcosa. Segui questo approccio graduale:<\/p>\n<p><strong>Fase 1: modalit\u00e0 Report-Only<\/strong><\/p>\n<p>Inizia con l&#8217;header <span style=\"font-family: monospace\">Content-Security-Policy-Report-Only<\/span> invece di <span style=\"font-family: monospace\">Content-Security-Policy<\/span>. In questa modalit\u00e0, il browser segnala le violazioni nella console del browser senza bloccare nulla. Puoi cos\u00ec vedere cosa verrebbe bloccato senza impattare i visitatori.<\/p>\n<p><strong>Fase 2: analizzare le violazioni<\/strong><\/p>\n<p>Apri la console del browser (F12 \u2192 Console) e naviga il sito. Ogni violazione CSP viene segnalata con un messaggio che indica la direttiva violata e la risorsa bloccata. Annota tutte le origini che devono essere autorizzate.<\/p>\n<p><strong>Fase 3: costruire la policy definitiva<\/strong><\/p>\n<p>Dopo aver raccolto tutte le origini necessarie, costruisci la policy definitiva e passa da Report-Only a Content-Security-Policy per attivare il blocco effettivo.<\/p>\n<h2>Come aggiungere il CSP a WordPress<\/h2>\n<p>Puoi aggiungere il CSP in tre modi:<\/p>\n<p><strong>Via functions.php o plugin:<\/strong><\/p>\n<pre>add_action('send_headers', function() {\n    header(\"Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https:\/\/www.googletagmanager.com; style-src 'self' 'unsafe-inline' https:\/\/fonts.googleapis.com; font-src 'self' https:\/\/fonts.gstatic.com; img-src 'self' data: https:\/\/secure.gravatar.com;\");\n});<\/pre>\n<p><strong>Via .htaccess (Apache):<\/strong><\/p>\n<pre>Header set Content-Security-Policy \"default-src 'self'; script-src 'self' 'unsafe-inline';\"<\/pre>\n<p><strong>Via configurazione Nginx:<\/strong><\/p>\n<pre>add_header Content-Security-Policy \"default-src 'self'; script-src 'self' 'unsafe-inline';\";<\/pre>\n<p>In alternativa, il plugin <strong>HTTP Headers<\/strong> o <strong>Really Simple Security<\/strong> (ex SSL) offrono un&#8217;interfaccia grafica per configurare il CSP senza toccare codice.<\/p>\n<h2>Un CSP di partenza per WordPress<\/h2>\n<p>Ecco un esempio di CSP ragionevole per un sito WordPress standard con Google Analytics, Google Fonts, YouTube embed e Gravatar:<\/p>\n<pre>default-src 'self';\nscript-src 'self' 'unsafe-inline' 'unsafe-eval' https:\/\/www.googletagmanager.com https:\/\/www.google-analytics.com;\nstyle-src 'self' 'unsafe-inline' https:\/\/fonts.googleapis.com;\nimg-src 'self' data: https:\/\/secure.gravatar.com https:\/\/www.google-analytics.com;\nfont-src 'self' https:\/\/fonts.gstatic.com;\nframe-src https:\/\/www.youtube.com https:\/\/www.google.com;\nconnect-src 'self' https:\/\/www.google-analytics.com;\nobject-src 'none';\nbase-uri 'self';\nform-action 'self';<\/pre>\n<p><strong>Importante:<\/strong> questo \u00e8 un punto di partenza. Ogni sito \u00e8 diverso e il CSP va personalizzato in base ai servizi e ai plugin che utilizzi.<\/p>\n<h2>Testare e monitorare il CSP<\/h2>\n<p>Dopo aver implementato il CSP:<\/p>\n<ul>\n<li><strong>Testa tutte le pagine:<\/strong> homepage, articoli, pagine, form di contatto, carrello WooCommerce (se presente).<\/li>\n<li><strong>Controlla la console del browser:<\/strong> eventuali risorse bloccate verranno segnalate come errori.<\/li>\n<li><strong>Usa strumenti online:<\/strong> siti come <span style=\"font-family: monospace\">securityheaders.com<\/span> e il CSP Evaluator di Google ti aiutano a verificare la correttezza della policy.<\/li>\n<li><strong>Monitora nel tempo:<\/strong> quando aggiungi nuovi plugin o servizi, potresti dover aggiornare il CSP per autorizzare nuove origini.<\/li>\n<\/ul>\n<h2>Serve assistenza?<\/h2>\n<p>Implementare un Content Security Policy efficace su WordPress richiede competenza tecnica e test approfonditi. Se vuoi proteggere il tuo sito dagli attacchi XSS senza rompere funzionalit\u00e0, il team di <strong><a href=\"https:\/\/soccorsowp.it\/blog\/i-migliori-plugin-woocommerce-per-dominare-il-black-friday\/\">SoccorsoWP<\/a><\/strong> pu\u00f2 configurare il CSP perfetto per il tuo sito. <a href=\"https:\/\/soccorsowp.it\/ticket\/\">Apri un ticket<\/a> e rafforza la sicurezza del tuo WordPress.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come proteggere WordPress con il Content Security Policy (CSP) Il Content Security Policy (CSP) \u00e8 un header di sicurezza HTTP che protegge il tuo sito&#8230;<\/p>\n","protected":false},"author":1,"featured_media":25896,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"Content Security Policy (CSP) per WordPress: guida completa","_seopress_titles_desc":"Scopri come implementare il Content Security Policy su WordPress per proteggerti da attacchi XSS. Guida passo passo con esempi di policy.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","footnotes":""},"categories":[1700],"tags":[],"class_list":["post-25895","post","type-post","status-publish","format-standard","has-post-thumbnail","category-sicurezza-wordpress"],"_links":{"self":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts\/25895","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/comments?post=25895"}],"version-history":[{"count":0,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts\/25895\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/media\/25896"}],"wp:attachment":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/media?parent=25895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/categories?post=25895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/tags?post=25895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}