{"id":164063,"date":"2025-11-25T09:00:00","date_gmt":"2025-11-25T08:00:00","guid":{"rendered":"https:\/\/gtechgroup.it\/blog\/sicurezza-web-html-content-security-policy\/"},"modified":"2025-11-25T09:00:00","modified_gmt":"2025-11-25T08:00:00","slug":"sicurezza-web-html-content-security-policy","status":"publish","type":"post","link":"https:\/\/nuovosito.gtechgroup.it\/blog\/sicurezza-web-html-content-security-policy\/","title":{"rendered":"Sicurezza Web e HTML: Content Security Policy e Best Practice"},"content":{"rendered":"<p style=\"text-align: justify;\">La sicurezza web inizia dal codice HTML. Sebbene le vulnerabilit\u00e0 pi\u00f9 gravi spesso risiedano nel codice server-side, l&#8217;HTML offre diversi meccanismi di difesa che possono prevenire attacchi comuni come il <strong>Cross-Site Scripting (XSS)<\/strong>, il clickjacking e l&#8217;iniezione di contenuti malevoli. In questa guida esploreremo la Content Security Policy, il Subresource Integrity e le altre best practice di sicurezza implementabili tramite HTML e header HTTP correlati.<\/p>\n<h2>Minacce Comuni alla Sicurezza HTML<\/h2>\n<p style=\"text-align: justify;\">Il <strong>Cross-Site Scripting (XSS)<\/strong> \u00e8 la vulnerabilit\u00e0 web pi\u00f9 diffusa e consiste nell&#8217;iniezione di script malevoli nel codice HTML di una pagina. Un attaccante pu\u00f2 sfruttare un campo di input non sanitizzato per inserire codice JavaScript che viene eseguito nel browser degli altri utenti, rubando cookie di sessione, credenziali o dati personali. L&#8217;XSS pu\u00f2 essere di tre tipi: reflected (lo script \u00e8 nella URL), stored (lo script \u00e8 salvato nel database) e DOM-based (lo script manipola il DOM direttamente).<\/p>\n<p style=\"text-align: justify;\">Il <strong>clickjacking<\/strong> \u00e8 un attacco in cui una pagina malevola incorpora il sito vittima in un <code>&lt;iframe&gt;<\/code> trasparente sovrapposto a elementi cliccabili ingannevoli. L&#8217;utente crede di cliccare su un pulsante della pagina malevola, ma in realt\u00e0 interagisce con il sito incorporato, eseguendo azioni non intenzionali come acquisti, trasferimenti di denaro o modifiche alle impostazioni dell&#8217;account.<\/p>\n<p style=\"text-align: justify;\">L&#8217;<strong>iniezione di contenuti<\/strong> include attacchi come il data exfiltration tramite tag HTML (ad esempio, un tag <code>&lt;img&gt;<\/code> con un src malevolo che invia dati a un server esterno) e l&#8217;inserimento di form fasulli che raccolgono credenziali. Anche i <strong>mixed content<\/strong> (risorse HTTP caricate su una pagina HTTPS) rappresentano un rischio, poich\u00e9 le risorse non cifrate possono essere intercettate e modificate da un attaccante man-in-the-middle.<\/p>\n<h2>Content Security Policy: La Difesa Principale<\/h2>\n<p style=\"text-align: justify;\">La <strong>Content Security Policy (CSP)<\/strong> \u00e8 il meccanismo di difesa pi\u00f9 potente disponibile. Si tratta di un insieme di regole che indicano al browser quali risorse sono autorizzate a caricare e da quali origini. CSP pu\u00f2 essere implementata tramite un header HTTP o tramite un meta tag HTML:<\/p>\n<pre><code>&lt;!-- Implementazione via meta tag --&gt;\n&lt;meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'self'; script-src 'self' https:\/\/cdn.esempio.it; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; frame-ancestors 'none';\"&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">Le <strong>direttive CSP<\/strong> principali controllano diversi tipi di risorse: <code>default-src<\/code> \u00e8 il fallback per tutte le direttive non specificate, <code>script-src<\/code> controlla da dove possono essere caricati gli script JavaScript, <code>style-src<\/code> controlla i fogli di stile, <code>img-src<\/code> le immagini, <code>font-src<\/code> i font, <code>connect-src<\/code> le connessioni AJAX\/WebSocket, <code>frame-src<\/code> gli iframe incorporati nella pagina e <code>frame-ancestors<\/code> chi pu\u00f2 incorporare la nostra pagina in un iframe.<\/p>\n<p style=\"text-align: justify;\">I valori per ogni direttiva possono essere: <code>'self'<\/code> (solo dalla stessa origine), <code>'none'<\/code> (bloccato completamente), URL specifici (come <code>https:\/\/cdn.esempio.it<\/code>), <code>'unsafe-inline'<\/code> (permette script\/stili inline \u2014 da evitare se possibile) e <code>'unsafe-eval'<\/code> (permette eval() \u2014 da evitare assolutamente).<\/p>\n<h2>Nonce e Hash per Script Inline Sicuri<\/h2>\n<p style=\"text-align: justify;\">Il dilemma principale della CSP \u00e8 che bloccare gli script inline (<code>'unsafe-inline'<\/code> non specificato) \u00e8 la difesa pi\u00f9 efficace contro XSS, ma molti siti legittimi utilizzano script inline per funzionalit\u00e0 essenziali. La soluzione sono i <strong>nonce<\/strong> e gli <strong>hash<\/strong>.<\/p>\n<p style=\"text-align: justify;\">Un <strong>nonce<\/strong> (number used once) \u00e8 un token casuale generato dal server per ogni richiesta. Il server inserisce lo stesso nonce sia nella policy CSP sia nello script inline:<\/p>\n<pre><code>&lt;!-- Header CSP: script-src 'nonce-abc123random' --&gt;\n&lt;script nonce=\"abc123random\"&gt;\n  \/\/ Questo script \u00e8 autorizzato perch\u00e9 ha il nonce corretto\n  console.log('Script sicuro');\n&lt;\/script&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">Solo gli script con il nonce corretto vengono eseguiti. Un attaccante che inietta uno script non conosce il nonce (che cambia a ogni richiesta), quindi il suo script viene bloccato. L&#8217;alternativa \u00e8 l&#8217;<strong>hash<\/strong>: si calcola l&#8217;hash SHA-256 del contenuto dello script e lo si inserisce nella policy. Il browser calcola l&#8217;hash dello script nella pagina e lo confronta con quelli autorizzati.<\/p>\n<p style=\"text-align: justify;\">Per iniziare con CSP senza rischiare di rompere il sito, si pu\u00f2 utilizzare la modalit\u00e0 <strong>report-only<\/strong> che registra le violazioni senza bloccarle effettivamente, tramite l&#8217;header <code>Content-Security-Policy-Report-Only<\/code>. Questo permette di identificare tutte le risorse che verrebbero bloccate e di configurare la policy correttamente prima di attivarla.<\/p>\n<h2>Subresource Integrity e Risorse Esterne<\/h2>\n<p style=\"text-align: justify;\">Quando il nostro sito carica risorse da CDN o server esterni (librerie JavaScript, fogli di stile), c&#8217;\u00e8 il rischio che queste risorse vengano compromesse. Il <strong>Subresource Integrity (SRI)<\/strong> protegge da questo scenario verificando l&#8217;integrit\u00e0 del file scaricato tramite un hash crittografico:<\/p>\n<pre><code>&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/libreria@1.0.0\/lib.min.js\"\n        integrity=\"sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K\/uxAh6VgnYDnC+\"\n        crossorigin=\"anonymous\"&gt;&lt;\/script&gt;\n\n&lt;link rel=\"stylesheet\" href=\"https:\/\/cdn.example.com\/style.css\"\n      integrity=\"sha384-hash-del-file-css-qui\"\n      crossorigin=\"anonymous\"&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">Se il file sul CDN viene modificato (ad esempio, da un attaccante che ha compromesso il CDN), l&#8217;hash non corrisponder\u00e0 e il browser <strong>bloccher\u00e0 il caricamento<\/strong> della risorsa. L&#8217;attributo <code>crossorigin=\"anonymous\"<\/code> \u00e8 necessario per abilitare il controllo CORS sulle risorse cross-origin. Gli hash SRI possono essere generati con strumenti online come srihash.org o tramite la command line.<\/p>\n<h2>Iframe, Referrer Policy e Altre Protezioni<\/h2>\n<p style=\"text-align: justify;\">L&#8217;attributo <code>sandbox<\/code> sul tag <code>&lt;iframe&gt;<\/code> limita drasticamente le capacit\u00e0 del contenuto incorporato. Un iframe con sandbox attivo non pu\u00f2 eseguire script, inviare form, aprire popup o accedere allo storage del genitore. Si possono riattivare selettivamente le capacit\u00e0 necessarie:<\/p>\n<pre><code>&lt;!-- Iframe completamente sandboxed --&gt;\n&lt;iframe src=\"widget.html\" sandbox&gt;&lt;\/iframe&gt;\n\n&lt;!-- Iframe con permessi specifici --&gt;\n&lt;iframe src=\"form.html\" sandbox=\"allow-scripts allow-forms allow-same-origin\"&gt;&lt;\/iframe&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">La <strong>Referrer Policy<\/strong> controlla quante informazioni sull&#8217;URL di provenienza vengono inviate quando l&#8217;utente naviga verso un&#8217;altra pagina o quando il browser carica risorse esterne. Pu\u00f2 essere configurata tramite il meta tag <code>&lt;meta name=\"referrer\" content=\"strict-origin-when-cross-origin\"&gt;<\/code> o tramite l&#8217;attributo <code>referrerpolicy<\/code> sui singoli link e risorse. La policy <code>strict-origin-when-cross-origin<\/code> \u00e8 il valore predefinito nei browser moderni e offre un buon equilibrio tra funzionalit\u00e0 e privacy.<\/p>\n<p style=\"text-align: justify;\">L&#8217;header <strong>X-Frame-Options<\/strong>, sebbene in fase di deprecazione a favore della direttiva CSP <code>frame-ancestors<\/code>, \u00e8 ancora utile per la retrocompatibilit\u00e0. Il valore <code>DENY<\/code> impedisce completamente l&#8217;incorporamento della pagina in iframe, mentre <code>SAMEORIGIN<\/code> permette l&#8217;incorporamento solo dallo stesso dominio. Per una panoramica completa su come <a href=\"https:\/\/gtechgroup.it\/blog\/html-seo-strutturare-pagine-motori-ricerca\/\">strutturare le pagine HTML<\/a> in modo sicuro e ottimizzato, consultate la nostra guida dedicata.<\/p>\n<p style=\"text-align: justify;\">La sicurezza web \u00e8 un processo continuo che richiede attenzione costante. Implementare CSP, SRI e le altre protezioni HTML descritte in questa guida \u00e8 un passo fondamentale per proteggere il vostro sito e i vostri utenti dalle minacce pi\u00f9 comuni del web moderno.<\/p>\n<p style=\"text-align: justify;\">Hai bisogno di aiuto con la sicurezza del tuo sito web? <strong>G Tech Group<\/strong> offre servizi di sviluppo web professionale e consulenza tecnica. Contattaci a <strong>support@gtechgroup.it<\/strong> o via WhatsApp al <strong>0465 84 62 45<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La sicurezza web inizia dal codice HTML. Sebbene le vulnerabilit\u00e0 pi\u00f9 gravi spesso risiedano nel codice server-side, l&#8217;HTML offre diversi meccanismi di difesa che possono&hellip;<\/p>\n","protected":false},"author":2,"featured_media":164243,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1246],"tags":[786,787],"class_list":["post-164063","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-html","tag-sicurezza-web","tag-sviluppo-web"],"_links":{"self":[{"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/164063","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/comments?post=164063"}],"version-history":[{"count":0,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/164063\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/media\/164243"}],"wp:attachment":[{"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/media?parent=164063"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/categories?post=164063"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/tags?post=164063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}