Attenuazione dell'XSS assicurando che nessuna lettera sia dopo una parentesi angolare [duplicato]

0

Ritengo che sia abbastanza sicuro attenuare l'XSS non applicando lettere / simboli speciali subito dopo la parentesi < . Come specificato nella specifica HTML , il nome del tag dovrebbe seguire < per formare un valido elemento html. La soluzione semplice è in grado di mitigare l'XSS?

Supponiamo di creare un elemento html nel nostro attacco.

    
posta Timothy Leung 19.01.2017 - 11:44
fonte

1 risposta

1

Questo è sicuro sotto due presupposti:

  1. I browser seguono effettivamente le specifiche
  2. inserisci solo dati non attendibili tra i tag.

Per quanto riguarda il # 1, ho provato le versioni recenti di IE, Chrome e Firefox e sembra che tutti lo seguano. Ma nel passato i browser erano creature molto permissive, quindi potrebbero essercene di vecchi in giro che presumerebbero gentilmente che tu voglia dire <script> e non < script> .

Per quanto riguarda il n. 2, è importante ricordare che l'XSS dipende dal contesto. Supponendo che cleaned() sia un'implementazione del tuo schema, quanto segue sarebbe sicuro:

<div><?= cleaned(userdata); ?></div>                         <!-- Between tags. -->

Ma ad es. il seguente non sarebbe sicuro:

<input value="<?= cleaned(userdata); ?>">                    <!-- Inside attribute. -->
<script> let x = "<?= cleaned(userdata); ?>"; </script>      <!-- Inside script. -->
<style> a { color: <?= cleaned(userdata); ?>; } </style>     <!-- Inside style. -->

Come sempre, raccomando il foglio cheat di prevenzione OWASP XSS .

Modifica: dici no lettere . Come per questa risposta probabilmente non vuoi consentire <! , </ o <? , dal momento che potrebbero essere utilizzati per avviare commenti e chiudere tag. Potrebbe non portare a XSS, ma potrebbe comunque rovinare la tua pagina con conseguenze inaspettate.

    
risposta data 19.01.2017 - 11:57
fonte

Leggi altre domande sui tag