La mia domanda è, se qualche carattere è permesso nell'attributo alt di un tag img (ad eccezione delle virgolette doppie), XSS è possibile? Immagine valida o no.
La mia domanda è, se qualche carattere è permesso nell'attributo alt di un tag img (ad eccezione delle virgolette doppie), XSS è possibile? Immagine valida o no.
Supponendo che tu stia circondando di virgolette doppie, questo andrebbe bene. Tuttavia, potresti anche sfuggire a < & gt ;, anche se i browser tradizionali non avranno alcun problema, nel caso in cui qualcuno abbia un agente utente danneggiato. È valido all'interno di un attributo, non è richiesto in un attributo con doppia citazione: link
Non hai menzionato come viene citato l'attributo, quindi ho coperto tutte le possibilità di quotazione degli attributi. Questa risposta riflette la precondizione che le virgolette sono già state eliminate come hai detto nella tua domanda.
Sì, se l'attributo è di per sé quotato o non quotato:
<img src='http://www.example.com/foo.jpg' alt='user-controlled' />
e
<img src=http://www.example.com/foo.jpg alt=user-controlled />
sono entrambi vulnerabili. Il primo è vulnerabile alla seguente sequenza
' onload='alert('xss')
quindi il tag diventa
<img src='http://www.example.com/foo.jpg' alt='' onload='alert('xss')' />
e il secondo è vulnerabile a questa sequenza
bar onload=alert('xss')
che verrà visualizzato come
<img src=http://www.example.com/foo.jpg alt=bar onload=alert('xss') />
Per quanto riguarda l'attributo doppio virgolette, oltre a limitare o codificare i caratteri di virgoletta doppia ( "
- > "
), dovrai rimuovere o codificare il carattere di e commerciale ( &
- > %codice%). Da specifiche HTML :
Attribute values are a mixture of text and character references, except with the additional restriction that the text cannot contain an ambiguous ampersand
An ambiguous ampersand is a U+0026 AMPERSAND character (&) that is followed by one or more alphanumeric ASCII characters, followed by a ";" (U+003B) character, where these characters do not match any of the names given in the named character references section.
Poiché non puoi garantire che i dati controllati dall'utente non contengano una "e commerciale ambiguita", devi rimuovere o codificare correttamente questi caratteri.
Ora, se è possibile un attacco XSS con accesso solo al carattere &
per evitare il valore dell'attributo, probabilmente la risposta non è.
Se il valore &
viene inserito come dati utente e il tag diventa
<img alt="&" src="http://www.example.com/foo.jpg"/>
e&
verràprobabilmenteinterpretatocome&"
dalla maggior parte dei browser, quindi è improbabile utilizzarlo come vettore di attacco.
Tuttavia, è meglio fare le cose correttamente quando si tratta di sicurezza, non si sa mai se questo sfuggente passo falso potrebbe essere trasformato in qualcosa di malvagio da qualcosa come mXSS .
Leggi altre domande sui tag xss