Uso il deserializzatore JSON Newtonsoft. Come si può pulire JSON per XSS (cross site scripting)? O pulire la stringa JSON prima di deserializzare o scrivere una sorta di convertitore/disinfettante personalizzato? Se è così, non sono sicuro al 100% sul modo migliore per affrontarlo.pulizia JSON per XSS prima della deserializzazione
Di seguito è riportato un esempio di JSON a cui è stato iniettato uno script pericoloso e che necessita di "pulizia". Voglio una voglia di gestirlo prima di de-serializzarlo. Ma dobbiamo assumere tutti i tipi di scenari XSS, incluso lo script codificato BASE64, ecc., Quindi il problema è più complesso che una semplice stringa REGEX sostituisce.
{ "MyVar" : "hello<script>bad script code</script>world" }
Ecco un'istantanea della mia deserializer (JSON -> Oggetto):
public T Deserialize<T>(string json)
{
T obj;
var JSON = cleanJSON(json); //OPTION 1 sanitize here
var customConverter = new JSONSanitizer();// OPTION 2 create a custom converter
obj = JsonConvert.DeserializeObject<T>(json, customConverter);
return obj;
}
JSON è pubblicato da una terza interfaccia di partito interfaccia utente, quindi è abbastanza esposto, da qui la convalida sul lato server. Da lì, viene serializzato in tutti i tipi di oggetti e di solito viene memorizzato in un DB, in seguito per essere recuperato e rilasciato direttamente nell'interfaccia utente basata su HTML, quindi l'iniezione di script deve essere mitigata.
Ho aggiornato la mia domanda per indicare cosa intendo per "pulizia". – MarzSocks
Dipende dal contesto. Potresti fornire alcuni dettagli su come verranno visualizzati i dati? Conterrà dati URL? Sarà inserito direttamente nell'HTML? Sarà accessibile solo da javascript? è un attributo HTML? La prevenzione dell'XSS dipende molto dal contesto. – Gray
JSON viene pubblicato da un'interfaccia utente di terze parti, quindi è abbastanza esposto e quindi la convalida lato server. Da lì viene serializzato in tutti i tipi di oggetti e di solito viene memorizzato in un DB, in seguito per essere recuperato e emesso direttamente nell'interfaccia utente basata su HTML, quindi i tag di script devono essere controllati. Idealmente, vuoi pulirlo prima che entri anche nel livello logico dell'applicazione e il serializzatore è l'unico posto dove dominarli tutti. :-) – MarzSocks