XSS: ignora questo RegExp

2

Come si potrebbe ignorare questa espressione regexp anti-xss: /<(?:\w+)\W+?[\w]/

Ci sto lavorando ma non riesco a trovare un modo.

Per essere sicuro di averlo capito correttamente, questa ricerca regolare di un pattern con un '<', quindi uno o più caratteri, quindi uno o più caratteri non e poi un carattere.

Giusto?

EDIT: Ecco il codice:

<?php $xss = $_POST['xss']; if (preg_match('/<(?:\w+)\W+?[\w]/', $xss)) { echo '<p>I don\'t think so</p>'; } else { echo $xss; }

    
posta ibrahim87 20.10.2014 - 17:55
fonte

1 risposta

7

Dipende molto da come usi questa regex. Userò il codice PHP come esempio:

Esempio non sicuro: Sostituisci

echo "replaced: " . preg_replace('/<(?:\w+)\W+?[\w]/', '', $_GET['input']);

Questo non sarebbe sicuro. Esempio:

input=<<a|ascript>alert('xss');</script>

Questo perché la tua espressione regolare fa quello che pensi che faccia: cerca < seguito da uno o più caratteri alfanumerici, seguito da uno o più caratteri non alfanumerici e quindi da un singolo carattere alfanumerico.

Quindi nella stringa di attacco sopra, <a|a (un altro esempio di chiarezza: <aaa|||z ) corrisponde esattamente a questo e verrà rimosso. Pertanto, la stringa rimanente è <script>... .

Esempio più sicuro: filtro

Se d'altra parte lo usi in questo modo:

$isAttack = preg_match('/<(?:\w+)\W+?[\w]/', $_GET['input']);
if (!$isAttack) { echo "filtered: " . $_GET['input']; }

Quanto sopra non funzionerebbe.

Esempio più sicuro: punti deboli

Dovresti comunque stare attento a dove scrivi l'input dell'utente, anche se usi la regex come nell'esempio più sicuro. Questo ad esempio non sarebbe sicuro:

$isAttack = preg_match('/<(?:\w+)\W+?[\w]/', $_GET['input']);
if (!$isAttack) { echo "link: <a href="' . " . $_GET['input'] . '">click me</a>'; }

Esempio di attacco:

input=" onmouseover="alert('xss')

Per altri luoghi in cui questo tipo di filtraggio non è abbastanza buono, consulta l'owasp Scheda trucchi XSS Prevenzione .

    
risposta data 20.10.2014 - 19:48
fonte

Leggi altre domande sui tag