{"id":144958,"date":"2026-07-16T09:00:00","date_gmt":"2026-07-16T07:00:00","guid":{"rendered":"https:\/\/supporthost.com\/it\/?p=144958"},"modified":"2026-07-02T13:23:25","modified_gmt":"2026-07-02T11:23:25","slug":"cross-site-scripting","status":"publish","type":"post","link":"https:\/\/supporthost.com\/it\/cross-site-scripting\/","title":{"rendered":"Cross-site scripting: cos\u2019\u00e8 e come proteggersi"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Le vulnerabilit\u00e0 di tipo cross-site scripting sono molto <strong>comuni e facili da sfruttare<\/strong> perch\u00e9 un browser non vede la differenza tra il codice scritto dallo sviluppatore del sito e un comando malevolo inserito da un estraneo.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spesso pensiamo che solo chi fa errori come condividere la propria password possa subire il furto dell\u2019account, ma in realt\u00e0 su un sito sotto attacco XSS basta visitare per sbaglio una pagina infetta perch\u00e9 un hacker possa rubare la tua sessione, <strong>prendere il controllo del tuo profilo<\/strong> e agire a nome tuo, e senza che tu te ne accorga.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per aiutarti a prevenire situazioni del genere, in questa guida vedremo <strong>cos&#8217;\u00e8 e come funziona il cross-site scripting<\/strong>, le conseguenze per chi lo subisce e come difendersi, insieme ai principali errori da evitare.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Indice<\/h2><nav><ul><li><a href=\"#cose-il-cross-site-scripting-xss\">Cos\u2019\u00e8 il cross-site scripting (XSS)<\/a><\/li><li><a href=\"#come-funziona-un-attacco-xss\">Come funziona un attacco XSS<\/a><\/li><li><a href=\"#tipi-di-attacchi-xss\">Tipi di attacchi XSS<\/a><ul><li><a href=\"#xss-riflesso\">XSS riflesso\u00a0<\/a><\/li><li><a href=\"#xss-persistente\">XSS persistente\u00a0<\/a><\/li><li><a href=\"#xss-basato-su-dom\">XSS basato su DOM\u00a0<\/a><\/li><\/ul><\/li><li><a href=\"#esempi-di-xss\">Esempi di XSS<\/a><\/li><li><a href=\"#conseguenze-di-un-attacco-xss\">Conseguenze di un attacco XSS<\/a><\/li><li><a href=\"#differenza-tra-xss-e-csrf\">Differenza tra XSS e CSRF<\/a><\/li><li><a href=\"#come-difendersi-dagli-attacchi-xss\">Come difendersi dagli attacchi XSS<\/a><ul><li><a href=\"#validazione-e-sanitizzazione-degli-input\">Validazione e sanitizzazione degli input<\/a><\/li><li><a href=\"#escape-delloutput\">Escape dell&#8217;output<\/a><\/li><li><a href=\"#rendere-sicure-le-api-del-dom\">Rendere sicure le API del DOM<\/a><\/li><li><a href=\"#content-security-policy-csp\">Content Security Policy (CSP)<\/a><\/li><li><a href=\"#protezioni-nei-framework\">Protezioni nei framework<\/a><\/li><li><a href=\"#protezione-dei-cookie-di-sessione\">Protezione dei cookie di sessione<\/a><\/li><li><a href=\"#attivazione-di-plugin-di-sicurezza\">Attivazione di plugin di sicurezza<\/a><\/li><\/ul><\/li><li><a href=\"#errori-comuni-nella-prevenzione-xss\">Errori comuni nella prevenzione XSS<\/a><\/li><li><a href=\"#conclusioni\">Conclusioni<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 id=\"cose-il-cross-site-scripting-xss\" class=\"wp-block-heading\">Cos\u2019\u00e8 il cross-site scripting (XSS)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A seconda dei punti di vista, il cross-site scripting (XSS) \u00e8 una vulnerabilit\u00e0 dei siti web o il tipo di attacco informatico che la sfrutta. Attraverso l\u2019XSS gli hacker possono <strong>inserire nelle pagine visitate dagli utenti codice JavaScript che esegue azioni fraudolente<\/strong> come rubare dati, modificare la pagina o compiere operazioni a insaputa del visitatore.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La <strong>vulnerabilit\u00e0 XSS \u00e8 tipica dei siti che accettano input<\/strong>, cio\u00e8 dati che arrivano da utenti \u2013 per esempio attraverso moduli di contatto, barre di ricerca o commenti \u2013, ma anche da fonti esterne, come nel caso di URL, cookie, header HTTP, database o API. Ovviamente solo se non applicano gli accorgimenti necessari per la sicurezza del sito.<\/p>\n\n\n\n<h2 id=\"come-funziona-un-attacco-xss\" class=\"wp-block-heading\">Come funziona un attacco XSS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando un <strong>sito accetta dati esterni senza controllarli<\/strong>, per esempio attraverso moduli o barre di ricerca, gli hacker possono inserire nell&#8217;HTML codice JavaScript, che il browser eseguir\u00e0 come se facesse parte della pagina.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quello che fanno in pratica \u00e8 digitare <strong>al posto di un normale testo una stringa<\/strong>, racchiusa nei tag:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&lt;script&gt;&lt;\/script&gt;&nbsp;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il sito la riceve e la include nel codice HTML che invia al browser. Lo <strong>script entra cos\u00ec a far parte del DOM<\/strong>, il modello attraverso il quale il browser rappresenta la struttura della pagina, e a quel punto <strong>non viene pi\u00f9 distinto dal codice legittimo<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A seconda del tipo di attacco cross-site scripting, gli hacker possono <strong>distribuire il link alla pagina infetta<\/strong> tramite email, sms o chat, oppure aspettare che gli utenti ci arrivino da soli navigando sul sito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A <strong>differenza degli <\/strong><a href=\"https:\/\/supporthost.com\/it\/ddos\/\"><strong>attacchi DDoS<\/strong><\/a> \u2013 in cui un gran numero di dispositivi invia richieste simultanee a un server per sovraccaricarlo \u2013 gli attacchi XSS non puntano a rendere un sito irraggiungibile ma a usarlo in modo illecito.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/attacco-informatico-cross-site-scripting-1024x683.jpg\" alt=\"Attacco Informatico Cross Site Scripting\" class=\"wp-image-145075\" srcset=\"https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/attacco-informatico-cross-site-scripting-1024x683.jpg 1024w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/attacco-informatico-cross-site-scripting-300x200.jpg 300w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/attacco-informatico-cross-site-scripting-768x512.jpg 768w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/attacco-informatico-cross-site-scripting-94x63.jpg 94w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/attacco-informatico-cross-site-scripting-scaled.jpg 1385w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 id=\"tipi-di-attacchi-xss\" class=\"wp-block-heading\">Tipi di attacchi XSS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Esistono 3 diversi tipi di attacco cross-site scripting:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>XSS riflesso<\/li>\n\n\n\n<li>XSS persistente<\/li>\n\n\n\n<li>XSS basato su DOM.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ci\u00f2 che li distingue \u00e8 principalmente il modo in cui il codice malevolo viene consegnato alla vittima e se viene memorizzato o meno sul server.&nbsp;<\/p>\n\n\n\n<h3 id=\"xss-riflesso\" class=\"wp-block-heading\">XSS riflesso&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;XSS riflesso (reflected XSS) \u00e8 la forma pi\u00f9 comune di attacco cross-site scripting. In questo caso gli hacker inseriscono il codice malevolo come parametro alla fine dell\u2019URL di una pagina esistente, che assumer\u00e0 una forma simile a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;sito.it\/search?q=&lt;script&gt;codice_malevolo&lt;\/script&gt;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Quando un utente clicca sul link malevolo, il browser include l\u2019URL nell\u2019HTML della pagina. Il server \u201clo riflette\u201d, cio\u00e8 lo restituisce nella risposta, e il browser lo esegue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ll codice malevolo <strong>non viene salvato dal sito ma esiste solo temporaneamente nella richiesta e nella risposta<\/strong>: ecco perch\u00e9<strong> <\/strong>L&#8217;XSS riflesso viene chiamato anche XSS non persistente.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019attacco pu\u00f2 partire solo al clic dell\u2019utente, quindi gli hacker <strong>distribuiscono il link tramite email, messaggi o post<\/strong> sui social \u2013 nascosto dietro pulsanti o testi &#8211; ancora apparentemente innocui \u2013 e usano <a href=\"https:\/\/www.ibm.com\/it-it\/think\/topics\/social-engineering\" rel=\"noopener\">tecniche di ingegneria sociale<\/a> per indurre le persone ad aprirlo. Per esempio messaggi o email che ti avvisano che il tuo account verr\u00e0 sospeso se non verifichi subito i tuoi dati, che ti sar\u00e0 capitato tante volte di ricevere, spesso contengono pulsanti che puntano a URL manipolati di questo tipo.<\/p>\n\n\n\n<h3 id=\"xss-persistente\" class=\"wp-block-heading\">XSS persistente&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019XSS persistente (stored XSS) \u00e8 un tipo di attacco cross-site scripting in cui il <strong>codice malevolo viene salvato sul server<\/strong> \u2013 per esempio in un database \u2013 dopo essere stato inserito attraverso sezioni come commenti, forum o impostazioni del profilo utente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019<strong>hacker inserisce il codice attraverso un campo di input del sito<\/strong>, cio\u00e8 uno di quelli che servono ad acquisire dati dagli utenti e, se non sono state previste misure di sicurezza per evitarlo, il codice viene memorizzato cos\u00ec com\u2019\u00e8 e poi mostrato agli utenti quando arrivano sulla pagina. All\u2019apertura del contenuto, il loro <strong>browser riceve il codice insieme al resto dell\u2019HTML e lo esegue<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Come suggerisce il nome, l\u2019XSS persistente \u00e8 insidioso perch\u00e9 il codice malevolo pu\u00f2 continuare a colpire tutti i visitatori della pagina finch\u00e9 non viene rimosso dall\u2019HTML. Per verificare la presenza di infezioni di questo tipo puoi eseguire <a href=\"https:\/\/supporthost.com\/it\/scansione-sito\/\">scansioni del sito<\/a>, che permettono di individuare e correggere le anomalie.<\/p>\n\n\n\n<h3 id=\"xss-basato-su-dom\" class=\"wp-block-heading\">XSS basato su DOM&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nell&#8217;XSS basato su DOM la <strong>vulnerabilit\u00e0 si trova nel codice JavaScript della pagina<\/strong> \u2013 l\u2019insieme delle istruzioni che il browser scarica ed esegue localmente per rendere la pagina web interattiva e dinamica \u2013, quindi tutto avviene nel browser durante l&#8217;esecuzione della pagina.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il server restituisce una risposta normale, ma lato client il <strong>JavaScript del sito legge dati da una fonte non controllata<\/strong>, come un parametro nell&#8217;URL o il frammento dopo il simbolo #, e li scrive direttamente nel DOM senza verificarne il contenuto. A quel punto il browser interpreta quel contenuto come codice e lo esegue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019XSS basato su DOM \u00e8 il tipo di <strong>attacco cross-site scripting pi\u00f9 difficile da individuare<\/strong> proprio perch\u00e9 il server non \u00e8 coinvolto e non registra nulla di anomalo: tutto accade nel browser, in modo invisibile sia al proprietario del sito che all&#8217;utente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ecco una tabella che pu\u00f2 aiutarti a distinguere i <strong>tre tipi di attacco XSS<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-regular\"><table data-mtr-unique-id=\"6800d842b06d7773735d1270ef9951b7-1\" class=\"has-fixed-layout mtr-table mtr-thead-th\"><thead><tr><th class=\"has-text-align-center mtr-th-tag\" data-align=\"center\" data-mtr-content=\"Tipo di attacco\"><div class=\"mtr-cell-content\">Tipo di attacco<\/div><\/th><th class=\"has-text-align-center mtr-th-tag\" data-align=\"center\" data-mtr-content=\"Caratteristica principale\"><div class=\"mtr-cell-content\">Caratteristica principale<\/div><\/th><th class=\"has-text-align-center mtr-th-tag\" data-align=\"center\" data-mtr-content=\"Dove avviene\"><div class=\"mtr-cell-content\">Dove avviene<\/div><\/th><th data-mtr-content=\"Quando si attiva\" class=\"mtr-th-tag\"><div class=\"mtr-cell-content\">Quando si attiva<\/div><\/th><\/tr><\/thead><tbody><tr><td data-mtr-content=\"Tipo di attacco\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>XSS riflesso<\/strong><\/div><\/td><td data-mtr-content=\"Caratteristica principale\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Il codice non viene salvato<\/div><\/td><td data-mtr-content=\"Dove avviene\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Server poi browser<\/div><\/td><td data-mtr-content=\"Quando si attiva\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">All\u2019apertura del link<\/div><\/td><\/tr><tr><td data-mtr-content=\"Tipo di attacco\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>XSS persistente<\/strong><\/div><\/td><td data-mtr-content=\"Caratteristica principale\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Il codice viene salvato<\/div><\/td><td data-mtr-content=\"Dove avviene\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Server (database) poi browser<\/div><\/td><td data-mtr-content=\"Quando si attiva\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">A ogni visualizzazione della pagina<\/div><\/td><\/tr><tr><td data-mtr-content=\"Tipo di attacco\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>XSS basato su DOM<\/strong><\/div><\/td><td data-mtr-content=\"Caratteristica principale\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Tutto avviene nel browser<\/div><\/td><td data-mtr-content=\"Dove avviene\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Browser<\/div><\/td><td data-mtr-content=\"Quando si attiva\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Durante l\u2019esecuzione di JavaScript<\/div><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 id=\"esempi-di-xss\" class=\"wp-block-heading\">Esempi di XSS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Gli attacchi cross-site scripting possono colpire attraverso funzionalit\u00e0 presenti sulla maggior parte dei siti come una sezione commenti, una barra di ricerca, un&#8217;applicazione che aggiorna la pagina in tempo reale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;esempio pi\u00f9 classico riguarda i <strong>moduli per i commenti<\/strong>, dove gli utenti possono inserire contenuto testuale che viene salvato nel database e ripubblicato come HTML. Se il sito non controlla quello che riceve, chiunque pu\u00f2 inserire codice JavaScript invece di testo normale, che verr\u00e0 poi eseguito dal browser come se fosse parte legittima del sito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spesso gli hacker sfruttano anche il fatto che la barra di <a href=\"https:\/\/supporthost.com\/it\/ricerca-wordpress\/\">ricerca di WordPress<\/a> e di altri CMS <strong>genera un URL con parametri<\/strong>, e che molti siti mostrano nella pagina dei risultati anche le parole chiave inserite. Se il sito non filtra quel valore prima di includerlo nella pagina, un <strong>hacker pu\u00f2 inserire nel campo di ricerca uno script<\/strong> che finir\u00e0 nell&#8217;URL e poi nell&#8217;HTML e che verr\u00e0 eseguito dal browser. Il link col parametro di ricerca potr\u00e0 essere inoltrato attraverso diversi canali di messaggistica come capita abitualmente nelle truffe informatiche.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ancora pi\u00f9 insidioso \u00e8 il caso delle <strong>applicazioni che utilizzano JavaScript per aggiornare la pagina in tempo reale<\/strong>, come alcune web app, applicazioni SPA o ecommerce. In questi contesti, il codice del sito preleva dati direttamente dall&#8217;URL o da altri elementi del browser e li inserisce nel DOM senza una preventiva bonifica. Poich\u00e9 l&#8217;intera operazione avviene localmente sul dispositivo dell&#8217;utente, un hacker potrebbe iniettare script malevoli che vengono eseguiti istantaneamente, il tutto senza che il server riceva o registri alcuna attivit\u00e0 anomala. Per fortuna la maggior parte delle applicazioni moderne \u00e8 progettata con <strong>adeguate misure di sicurezza<\/strong> che riducono significativamente questo rischio.<\/p>\n\n\n\n<h2 id=\"conseguenze-di-un-attacco-xss\" class=\"wp-block-heading\">Conseguenze di un attacco XSS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le conseguenze di un attacco XSS dipendono dal contesto, ma possono essere gravi perch\u00e9 il codice agisce con i privilegi dell&#8217;utente che lo esegue involontariamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uno scenario comune \u00e8 il furto dei cookie di sessione, grazie ai quali gli hacker possono impersonare l&#8217;utente e accedere al suo profilo e <strong>impossessarsi di informazioni riservate<\/strong>, credenziali per l\u2019accesso o dati delle carte di credito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando l&#8217;attacco colpisce un amministratore, le conseguenze si estendono a tutto il sito: per esempio attraverso il cross-site scripting \u00e8 possibile <strong>modificare il contenuto della pagina<\/strong> e pubblicare messaggi offensivi o di propaganda, informazioni false e fake news.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019attacco XSS pu\u00f2 essere un mezzo per <strong>reindirizzare i visitatori verso siti di phishing<\/strong>, nei quali le informazioni inserite dall\u2019utente vengono acquisite dagli hacker. In questi casi viene iniettato uno script che forza l\u2019apertura di un sito esterno che imita una piattaforma su cui gli utenti sono abituati a eseguire l\u2019accesso.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"666\" src=\"https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/conseguenze-attacchi-informatici-xss-1024x666.png\" alt=\"Conseguenze Attacchi Informatici Xss\" class=\"wp-image-145078\" srcset=\"https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/conseguenze-attacchi-informatici-xss-1024x666.png 1024w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/conseguenze-attacchi-informatici-xss-300x195.png 300w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/conseguenze-attacchi-informatici-xss-768x500.png 768w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/conseguenze-attacchi-informatici-xss-97x63.png 97w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/conseguenze-attacchi-informatici-xss.png 1230w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 id=\"differenza-tra-xss-e-csrf\" class=\"wp-block-heading\">Differenza tra XSS e CSRF<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cross-site scripting (XSS) e <a href=\"https:\/\/supporthost.com\/it\/cross-site-request-forgery\/\">cross-site request forgery<\/a> (CSRF) sono due attacchi molto diversi che possono essere confusi perch\u00e9 hanno un nome simile e coinvolgono entrambi il browser e le richieste HTTP.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La prima differenza sta nel funzionamento e nell&#8217;<strong>obiettivo<\/strong>, perch\u00e9 il <strong>CSRF <\/strong>fa in modo che l\u2019utente invii una richiesta al server senza rendersene conto, mentre l&#8217;<strong>XSS<\/strong> punta a eseguire codice nel browser della persona che ha aperto la pagina infetta (e non richiede nessun\u2019altra azione da parte sua per attivarsi).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nel <strong>CSRF <\/strong>il <strong>browser <\/strong>non esegue nulla di anomalo ma si limita a inviare una richiesta che il server considera valida perch\u00e9 proviene da un utente autenticato. Nell&#8217;<strong>XSS<\/strong> invece il browser esegue codice malevolo perch\u00e9 si trova gi\u00e0 nella pagina.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In generale le <strong>conseguenze dell&#8217;XSS tendono a essere pi\u00f9 gravi<\/strong> perch\u00e9, a differenza del CSRF, permette ai criminali informatici di leggere le risposte del server e sottrarre dati.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oltre alla tipologia di attacco, capita che si confondano i metodi per la protezione da CSRF e XSS. Questo pu\u00f2 essere pericoloso perch\u00e9 i<strong> token anti-CSRF non proteggono dal cross-site scripting<\/strong>; per di pi\u00f9 se sono presenti vulnerabilit\u00e0 XSS anche i sistemi di difesa CSRF possono essere aggirati.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table data-mtr-unique-id=\"6800d842b06d7773735d1270ef9951b7-2\" class=\"has-fixed-layout mtr-table mtr-thead-th\"><thead><tr><th data-mtr-content=\"\" class=\"mtr-th-tag\"><div class=\"mtr-cell-content\"><\/div><\/th><th data-mtr-content=\"XSS (cross-site scripting)\" class=\"mtr-th-tag\"><div class=\"mtr-cell-content\">XSS (cross-site scripting)<\/div><\/th><th data-mtr-content=\"CSRF (cross-site request forgery)\" class=\"mtr-th-tag\"><div class=\"mtr-cell-content\">CSRF (cross-site request forgery)<\/div><\/th><\/tr><\/thead><tbody><tr><td data-mtr-content=\"\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Scopo<\/strong><\/div><\/td><td data-mtr-content=\"XSS (cross-site scripting)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Eseguire codice nel browser della vittima<\/div><\/td><td data-mtr-content=\"CSRF (cross-site request forgery)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Far inviare richieste al server a insaputa dell\u2019utente<\/div><\/td><\/tr><tr><td data-mtr-content=\"\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Come funziona<\/strong><\/div><\/td><td data-mtr-content=\"XSS (cross-site scripting)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Il codice malevolo viene inserito nella pagina e interpretato dal browser<\/div><\/td><td data-mtr-content=\"CSRF (cross-site request forgery)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">L\u2019utente autenticato viene indotto a inviare una richiesta valida<\/div><\/td><\/tr><tr><td data-mtr-content=\"\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Ruolo dell\u2019utente<\/strong><\/div><\/td><td data-mtr-content=\"XSS (cross-site scripting)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Basta che apra la pagina infetta<\/div><\/td><td data-mtr-content=\"CSRF (cross-site request forgery)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Deve compiere un\u2019azione (es. clic su link)<\/div><\/td><\/tr><tr><td data-mtr-content=\"\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Esecuzione di codice<\/strong><\/div><\/td><td data-mtr-content=\"XSS (cross-site scripting)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">S\u00ec, nel browser<\/div><\/td><td data-mtr-content=\"CSRF (cross-site request forgery)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">No<\/div><\/td><\/tr><tr><td data-mtr-content=\"\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Accesso ai dati<\/strong><\/div><\/td><td data-mtr-content=\"XSS (cross-site scripting)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Pu\u00f2 leggere e inviare dati<\/div><\/td><td data-mtr-content=\"CSRF (cross-site request forgery)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Non pu\u00f2 leggere la risposta del server<\/div><\/td><\/tr><tr><td data-mtr-content=\"\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Conseguenze tipiche<\/strong><\/div><\/td><td data-mtr-content=\"XSS (cross-site scripting)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Phishing, modifica del sito e altre azioni non autorizzate a nome dell\u2019utente <\/div><\/td><td data-mtr-content=\"CSRF (cross-site request forgery)\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Operazione non autorizzata (es. cambio password o trasferimenti di denaro)<\/div><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 id=\"come-difendersi-dagli-attacchi-xss\" class=\"wp-block-heading\">Come difendersi dagli attacchi XSS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per difenderti dagli attacchi XSS devi applicare sempre un principio fondamentale: non considerare mai affidabili i dati che arrivano dall&#8217;esterno, a prescindere dalla fonte. Questo implica che dovrai adottare una serie di <strong>misure di sicurezza che filtrano gli input, sia lato server che lato client<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esistono diversi metodi per proteggere il tuo sito da attacchi cross-site scripting. Pi\u00f9 riesci a implementarne, pi\u00f9 al sicuro sarai.<\/p>\n\n\n\n<h3 id=\"validazione-e-sanitizzazione-degli-input\" class=\"wp-block-heading\">Validazione e sanitizzazione degli input<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La validazione e la sanitizzazione degli input sono due tecniche che possono dare buoni risultati se messe insieme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La <strong>validazione <\/strong>consiste nel verificare che i <strong>dati rispettino un formato atteso<\/strong>, per esempio che un campo numerico contenga solo numeri o che un indirizzo email presenti una struttura standard.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La <strong>sanitizzazione <\/strong>serve invece a rimuovere o <strong>neutralizzare i contenuti potenzialmente pericolosi<\/strong> prima che vengano elaborati.&nbsp;<\/p>\n\n\n\n<h3 id=\"escape-delloutput\" class=\"wp-block-heading\">Escape dell&#8217;output<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una delle difese pi\u00f9 efficaci contro l&#8217;XSS \u00e8 l\u2019escape dell&#8217;output, letteralmente una messa in sicurezza del contenuto che il sito genera e invia al browser. Questa tecnica consiste nel <strong>trasformare i caratteri speciali in entit\u00e0 sicure<\/strong> prima di inserirli nella pagina, in modo che il browser possa interpretare gli elementi solo come testo e non come codice eseguibile, HTML o JavaScript.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si tratta quindi di convertire i caratteri speciali nelle loro rappresentazioni testuali, <strong>diverse a seconda del contesto<\/strong>, che pu\u00f2 essere HTML, JavaScript, un attributo o un URL. Per esempio nel caso dell\u2019HTML \u201c&amp;\u201d viene convertito in \u201c&amp;amp;\u201d e \u201c&gt;\u201d in \u201c&amp;gt;\u201d.<\/p>\n\n\n\n<h3 id=\"rendere-sicure-le-api-del-dom\" class=\"wp-block-heading\">Rendere sicure le API del DOM<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le API del DOM sono le funzioni e i metodi forniti dal browser per leggere e modificare la struttura della pagina, alcune delle quali inseriscono i contenuti direttamente al suo interno. Questo meccanismo \u00e8 <strong>rischioso se i dati non vengono sanitizzati o sottoposti a escape<\/strong>, perch\u00e9 possono essere interpretati dal browser come codice HTML o JavaScript ed eseguiti immediatamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ecco perch\u00e9 \u00e8 importante che chi scrive codice JavaScript scelga <strong>metodi che trattano il contenuto come testo semplice<\/strong> \u2013 per esempio <em>textContent<\/em> \u2013, anzich\u00e9 metodi che lo interpretano come HTML eseguibile \u2013 come <em>innerHTML<\/em>. \u00c8 una precauzione facile da adottare ma molto efficace nel ridurre il rischio di XSS basato sul DOM.<\/p>\n\n\n\n<h3 id=\"content-security-policy-csp\" class=\"wp-block-heading\">Content Security Policy (CSP)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La Content Security Policy consiste in una serie di norme per la sicurezza che <strong>definiscono quali risorse pu\u00f2 caricare ed eseguire una pagina<\/strong> e vengono comunicate dal server al browser tramite un header HTTP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le regole impediscono l&#8217;esecuzione di codice che non rispetti determinati requisiti, per esempio possono filtrare gli script che provengono da altri siti o addirittura da tutti i plugin. Da una parte aiutano a prevenire gli attacchi XSS, ma dall\u2019altra <strong>possono interferire con le funzionalit\u00e0 del sito<\/strong>, quindi devono essere gestite con attenzione.<\/p>\n\n\n\n<h3 id=\"protezioni-nei-framework\" class=\"wp-block-heading\">Protezioni nei framework<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I framework \u2013 un insieme di strumenti gi\u00e0 pronti che aiutano a sviluppare siti web in modo pi\u00f9 veloce e sicuro \u2013 oggi <strong>includono protezioni contro l&#8217;XSS<\/strong>, per esempio l\u2019escape automatico, e liberano i programmatori da una parte del lavoro. Perch\u00e9 siano efficaci \u00e8 importante non disabilitare le impostazioni predefinite per la sicurezza e mantenerli sempre aggiornati.<\/p>\n\n\n\n<h3 id=\"protezione-dei-cookie-di-sessione\" class=\"wp-block-heading\">Protezione dei cookie di sessione<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I cookie \u2013 i file che il sito salva nel browser per mantenere attiva la sessione dell\u2019utente \u2013 <strong>possono essere intercettati <\/strong>in caso di attacco, se non sono protetti correttamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I cookie possono essere messi al sicuro grazie a due attributi, cio\u00e8 istruzioni che il server invia al browser quando li crea.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019<strong>attributo HttpOnly<\/strong> impedisce l\u2019accesso ai cookie tramite JavaScript e cos\u00ec rende pi\u00f9 difficile il loro furto in caso di attacco XSS.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019<strong>attributo Secure<\/strong> garantisce invece che i cookie vengano trasmessi solo su connessioni cifrate (HTTPS). Insieme possono ridurre significativamente l\u2019impatto di un attacco.<\/p>\n\n\n\n<h3 id=\"attivazione-di-plugin-di-sicurezza\" class=\"wp-block-heading\">Attivazione di plugin di sicurezza<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Su CMS come WordPress \u00e8 possibile installare un <a href=\"https:\/\/supporthost.com\/it\/plugin-sicurezza-wordpress\/\"><strong>plugin di sicurezza<\/strong><\/a><strong> che riduca le vulnerabilit\u00e0 XSS<\/strong>, per esempio filtrando gli input sospetti. Tieni conto per\u00f2 che questi <a href=\"https:\/\/supporthost.com\/it\/plugin-che-rallentano-wordpress\/\">plugin rallentano WordPress<\/a> ed \u00e8 sempre meglio agire prima lato server, scegliendo un <a href=\"https:\/\/supporthost.com\/it\/hosting-wordpress\/\">hosting WordPress sicuro<\/a>.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"680\" src=\"https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/difendersi-cross-site-scripting-1024x680.png\" alt=\"Difendersi Cross Site Scripting\" class=\"wp-image-145076\" srcset=\"https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/difendersi-cross-site-scripting-1024x680.png 1024w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/difendersi-cross-site-scripting-300x199.png 300w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/difendersi-cross-site-scripting-768x510.png 768w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/difendersi-cross-site-scripting-95x63.png 95w, https:\/\/supporthost.com\/it\/wp-content\/uploads\/sites\/2\/2026\/04\/difendersi-cross-site-scripting.png 1189w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 id=\"errori-comuni-nella-prevenzione-xss\" class=\"wp-block-heading\">Errori comuni nella prevenzione XSS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Uno degli errori pi\u00f9 gravi nel campo delle vulnerabilit\u00e0 XSS \u00e8 <strong>validare solo gli input<\/strong>, cio\u00e8 i dati in ingresso, e non applicare l&#8217;escape dell&#8217;output. Infatti un input potrebbe sembrare innocuo e non esserlo, quindi \u00e8 importante trasformarlo in testo semplice in modo che non possa essere letto come script.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un altro errore possibile \u00e8 <strong>applicare a tutti i contesti lo stesso tipo di codifica<\/strong> \u2013 ovvero la trasformazione di caratteri speciali in sequenze di testo non eseguibile \u2013, senza considerare che HTML, attributi, JavaScript e URL richiedono regole diverse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sul fronte del DOM invece, una cattiva pratica diffusa \u00e8 <strong>usare <\/strong><strong><em>innerHTML<\/em><\/strong><em> <\/em>invece di metodi sicuri come <em>textContent <\/em>per inserire contenuti dinamici.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Anche basare la sanitizzazione degli input su <strong>filtri che dipendono da blacklist<\/strong>, bloccando stringhe o caratteri specifici come &lt;script&gt; o alert(), \u00e8 un approccio inefficace perch\u00e9 esistono molte varianti per aggirarlo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Capita anche che gli sviluppatori <strong>si limitino a controlli lato client<\/strong> e trascurino le validazioni lato server, non testino le protezioni oppure si affidino completamente a plugin o librerie di terze parti che possono non coprire tutti i casi o contenere a loro volta vulnerabilit\u00e0.<\/p>\n\n\n\n<h2 id=\"conclusioni\" class=\"wp-block-heading\">Conclusioni<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In questa guida abbiamo visto che il cross-site scripting \u00e8 una vulnerabilit\u00e0 che colpisce i siti che accettano dati dall\u2019utente senza controllarne il contenuto, permettendo agli hacker di inserire nelle pagine codice JavaScript eseguito dal browser come se fosse legittimo.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I tre tipi di attacco XSS \u2013 riflesso, persistente basato sul DOM \u2013 <strong>possono avere conseguenze gravi<\/strong> come la sottrazione di dati sensibili o la perdita del controllo sul proprio sito.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Per difendersi bisogna affiancare pi\u00f9 misure<\/strong> scegliendo tra quelle disponibili come validare gli input, effettuare l&#8217;escape dell&#8217;output, usare metodi sicuri per il DOM, configurare una Content Security Policy e proteggere i cookie con gli attributi HttpOnly e Secure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">E tu stai cercando di eliminare questo tipo di vulnerabilit\u00e0? Se ti va, parliamone nei commenti.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le vulnerabilit\u00e0 di tipo cross-site scripting sono molto comuni e facili da sfruttare perch\u00e9 un browser non vede la differenza tra il codice scritto dallo sviluppatore del sito e un comando malevolo inserito da un estraneo.&nbsp; Spesso pensiamo che solo chi fa errori come condividere la propria password possa subire il furto dell\u2019account, ma in [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":145679,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[29],"tags":[],"class_list":["post-144958","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sicurezza"],"acf":[],"_links":{"self":[{"href":"https:\/\/supporthost.com\/it\/wp-json\/wp\/v2\/posts\/144958","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/supporthost.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/supporthost.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/supporthost.com\/it\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/supporthost.com\/it\/wp-json\/wp\/v2\/comments?post=144958"}],"version-history":[{"count":17,"href":"https:\/\/supporthost.com\/it\/wp-json\/wp\/v2\/posts\/144958\/revisions"}],"predecessor-version":[{"id":146424,"href":"https:\/\/supporthost.com\/it\/wp-json\/wp\/v2\/posts\/144958\/revisions\/146424"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/supporthost.com\/it\/wp-json\/wp\/v2\/media\/145679"}],"wp:attachment":[{"href":"https:\/\/supporthost.com\/it\/wp-json\/wp\/v2\/media?parent=144958"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/supporthost.com\/it\/wp-json\/wp\/v2\/categories?post=144958"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/supporthost.com\/it\/wp-json\/wp\/v2\/tags?post=144958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}