Dispongo di un servizio che consente all'utente di specificare un nome di funzione di callback che avvolge i dati restituiti per supportare callback jsonp. Voglio assicurarmi di coprire tutte le mie basi per quanto riguarda la prevenzione degli attacchi XSS.
Nota, ho letto la checklist di sicurezza OWASP ma nessuno dei consigli sembra indirizza direttamente questa domanda.
Questi sono i metodi attualmente supportati per specificare la funzione jsonp in cui il nome della funzione è cbFn
e cbFn
è dichiarato autonomo, un metodo su un oggetto o accessibile da un oggetto / array:
https://service.com/cbFn
https://service.com/?callback=cbFn
https://service.com/?callback=obj.cbFn
https://service.com/?callback=obj['cbFn']
https://service.com/?callback=obj[1]
Questi restituiscono:
cbFn({data: 'data being returned'})
obj.cbFn({data: 'data being returned'})
obj['cbFn']({data: 'data being returned'})
obj[1]({data: 'data being returned'})
Tuttavia, le seguenti richieste anche funzionano e sono i problemi XSS noti che voglio eludere:
// executes an anonymous function
https://service.com/?callback=(()=%3E{alert(1)})
// replaces the user's callback function with our own
https://service.com/?callback=cbFn=((data)=>{alert(data)})
È sufficiente sostituire / rimuovere i caratteri ()=>
nel nome di callback per evitare le vulnerabilità XSS? Voglio consentire il set di caratteri javascript valido per i nomi delle funzioni, quindi limitare l'intervallo di caratteri valido a /[$_\w]+/
(alfanumerico più $ e _) non sembra essere una buona opzione.