Prevenzione dell'XSS per l'API REST

10

Ho un'API REST a molla e un progetto client. La pagina HTML dei progetti client utilizza le chiamate jquery ajax per recuperare i dati dall'API REST utilizzando il formato json o xml. La mia domanda è evitare gli attacchi XSS su una pagina web, dove devo eseguire la codifica dei dati di input dell'utente (cioè dati non fidati)? Attualmente sto codificando i dati nel mio controller REST prima di restituire la risposta. Sto seguendo l'articolo di cheat di OWASP XSS Prevention. Ma dal mio punto di vista, tutto è ajax e il recupero dei dati da json e l'inserimento in html con jquery, non sono sicuro di dove dovrebbe essere codificato il codificatore utente per codificare i dati non attendibili. Mettere la codifica in REST Controller è una buona opzione?

Grazie in anticipo.

    
posta MShah 28.10.2013 - 07:55
fonte

1 risposta

22

Se l'API REST restituisce puramente JSON (e mai HTML), allora esegui l'escape del codice HTML lato client, in JavaScript.

Se la pagina HTML del client utilizza il template JQuery o crea HTML con chiamate a funzioni come .html() nessuna di queste ha la protezione XSS. Un approccio è che il codice client richiama esplicitamente una funzione di escape su tutti gli input non attendibili. Tuttavia, un approccio che preferisco è quello di utilizzare un plugin JQuery che esegue l'escape automatico. Ecco due approcci per questo:

Le persone possono criticare questo approccio, dicendo "non si può fare affidamento sul controllo lato client per la sicurezza". Quella critica è basata sull'incomprensione; in questa particolare istanza puoi farvi affidamento.

È da notare che AngularJS include l'escape automatico per impostazione predefinita. Se oggi scrivessero JQuery da zero, mi aspetto che JQuery includa anche questo.

Uno dei motivi per non eseguire l'escape HTML nell'API REST è che potresti avere un client non HTML che utilizza l'API. In tal caso, sicuramente non vuoi applicare l'escape HTML per l'applicazione.

È importante che tu restituisca JSON usando l'intestazione Content-Type corretta (application / json) per evitare attacchi da parte di API.

    
risposta data 28.10.2013 - 09:44
fonte

Leggi altre domande sui tag