La prevenzione XSS archiviata deve essere client o lato server? [duplicare]

1

Qual è il modo migliore per prevenire XSS memorizzato?

Il problema con la prima soluzione è che i dati possono essere modificati (codifica dei caratteri, cancellazione parziale o totale ...), che può alterare il comportamento dell'applicazione, specialmente per problemi di visualizzazione.

    
posta Pleymor 23.08.2016 - 17:41
fonte

4 risposte

1

Normalmente per la prevenzione dell'XSS usiamo il carattere di escape html per validare il carattere di input o l'input. Secondo OWASP ecco alcune delle cose che devi seguire:

Per lato client e lato server:

  • Esci dal carattere prima di elaborare l'input specificato.
  • Utilizza meglio la libreria di codifica di sicurezza.
  • Non inserire dati non fidati tranne nella posizione consentita.
  • Escape HTML prima di inserire dati non attendibili nel contenuto dell'elemento HTML
  • Fuga di attributi prima di inserire dati non affidabili in attributi comuni HTML
  • Escape JavaScript prima di inserire dati non attendibili nei valori dei dati JavaScript
  • HTML escape valori JSON in un contesto HTML e lettura dei dati con JSON.parse
  • Escape CSS e convalida rigorosamente prima di inserire dati non attendibili nei valori delle proprietà dello stile HTML
  • Escape dell'URL prima di inserire dati non attendibili nei valori dei parametri URL HTML
  • Disinfetta la marcatura HTML con una libreria progettata per il lavoro
  • Impedisci l'XSS basato su DOM

Per lato server:

  • Usa flag cookie HTTPOnly

  • Implementa la politica di sicurezza del contenuto

  • Implementa e configura la sicurezza Mod di WAF come

  • Utilizza l'intestazione di risposta X-XSS-Protection

Esistono altre misure di prevenzione. Puoi controllare questo link per ottenere informazioni più dettagliate.

link

    
risposta data 23.08.2016 - 17:58
fonte
1

La soluzione più efficace è probabilmente un mix di convalida dell'input e codifica dell'output.

Non so che puoi dipendere dal cliente per implementare efficaci attenuazioni XSS. Speriamo che lo facciano, ma non è qualcosa su cui puoi fare affidamento.

La prima domanda che vuoi porre è che cosa fai con l'input che fallisce la validazione. Rimozione di caratteri errati e il resto degli input continua? Ciò renderà la tua applicazione imprevedibile per l'utente, che non sembra mai una buona idea.

Un'altra cosa da tenere a mente è che i tuoi dati potrebbero non essere sempre visualizzati in HTML. Cosa fare se i dati sono inclusi in un documento PDF o inviati a una stampante? Questi sistemi avranno i loro formati e la codifica HTML non avrà senso.

Ecco l'approccio che raccomanderei:

  • Definisci l'input accettabile in termini di dimensioni e set di caratteri.
  • Definisci il tuo comportamento per l'input non valido.
  • Convalida l'input e rifiuta (consigliato) o scrub
  • Utilizza metodi sicuri per memorizzare l'input nel tuo archivio dati
  • Quando si presentano i dati agli utenti, codificarli correttamente per il formato (HTML, javascript, ecc.)

In questo caso c'è il rischio che qualcuno nel tuo team faccia il presupposto perché i dati si trovano in un datastore interno che è sicuro e iniziano a utilizzare i dati senza eseguire la codifica appropriata.

    
risposta data 23.08.2016 - 19:16
fonte
0

Idealmente; lato server. Assicurati che il tuo codice non inserisca input utente non pubblicizzato nella pagina. Ma non sarebbe un disastro eseguirlo dal lato client. Perché la vittima è il cliente in cui viene controllato. Questo apre la possibilità all'utente di aggirare la misura di sicurezza, ma se fatto bene, sarebbe una seccatura.

    
risposta data 23.08.2016 - 17:54
fonte
0

Il client non dovrebbe essere responsabile della prevenzione di qualsiasi tipo di XSS a parte dall'XSS basato su DOM, sebbene le intestazioni di sicurezza possano aiutarlo a non eseguire nulla che non è destinato a. La prevenzione dell'XSS è ancora responsabilità del server, a parte l'XSS basato su DOM.

Anche il client browser è inutilizzabile durante la convalida perché un utente malintenzionato lo ignorerà per ottenere XSS.

Ho aggiornato questa domanda qui per come prevenire tutti i tipi di XSS. link (anche ulteriori informazioni sulle intestazioni di sicurezza).

    
risposta data 23.08.2016 - 20:55
fonte

Leggi altre domande sui tag