Existen principalmente dos tipos de ataques XSS: persistentes y ad hoc.
Una sesión de navegación privada lo protegerá de ataques XSS ad hoc, pero no de ataques persistentes.
Un XSS persistente funciona cuando un atacante inyecta un código de script en algún lugar de la página sensible, esto podría hacerse enviándole un mensaje preparado en la plataforma, o por algún otro medio de inyectar datos en el almacenamiento de la página sensible. Cuando inicie sesión en la página confidencial para ver algunos datos, el servidor cargará los datos inyectados, los transferirá a su navegador y se ejecutarán si el sitio es vulnerable. Un ejemplo sería un mensaje preparado en una transacción de banca en línea. El atacante le enviaría una transacción real y la parte del mensaje contendría un script dañino. No hay ninguna otra página involucrada, por lo que no puede protegerse contra esto, solo el propietario de la página puede hacerlo.
Un XSS ad-hoc puede funcionar haciendo que haga clic en un enlace preparado, que incluye datos de inyección. Dicho enlace podría parecerse a https://banking.securebank.com/searchTransaction?query=<script>doEvil(...)</script>
, donde el script inyectado es parte del enlace. El atacante intentará que hagas clic en este enlace o intentará ejecutarlo en segundo plano a través de JavaScript desde su propia página preparada. Por lo tanto, si abre enlaces de correo electrónico y páginas que no son de confianza en una sesión separada, su cuenta de usuario en la página confidencial estará a salvo de este tipo de ataque, ya que no ha iniciado sesión en la página sensible en la sesión de incógnito. Por lo tanto, aunque el XSS aún pueda ejecutarse, no puede causar ningún daño a su propia cuenta en la página confidencial, que es lo que queremos proteger.