Gli attacchi XSS in WordPress purtroppo coinvolgono anche i CSS incorporati.
Consideriamo questo esempio:
<style>
#header {
background-image: url(<?php echo $bg; ?>);
}
</style>
Se l'attacco ha avuto successo avremo:
<style>
#header {
background-image: url('javascript: alert("XSS!")');
}
</style>
Nei CSS url()
è una funzione che elabora tutti i tipi di URL considerati validi dal browser, quindi anche quelli che eseguono codice JavaScript. Occorre quindi validare l'URL
memorizzato nella variabile che verrà passata alla funzione:
function my_is_valid_css_url( $url ) {
if( filter_var( $url, FILTER_VALIDATE_URL ) ) { // È un URL completo e valido?
if( preg_match( '/(\.jpg|\.jpeg|\.gif|\.png)$/', $url ) ) { // Contiene un riferimento ad un'immagine?
return true;
} else {
return false;
}
} else {
return false;
}
}