Utilizzo di htmlentities () in un'area di testo che supporta il BBCode per arrestare XSS

1

Voglio avere un'area di testo per pubblicare cose nel database con BBCode. Quindi, ho scaricato un codice JavaScript (per scrivere nello specifico BBCode quando l'immagine è stata cliccata) ma non ha trasformato il testo.

Ci sono immagini di lettere sopra l'area di testo come B, I e U. Quando faccio clic su una di esse, forse B, il JavaScript inserisce [b][/b] nell'area di testo. Ma quando invio il testo con un altro testo nel grassetto BBcode, non rende il testo in grassetto.

Quindi, pensavo che avrebbe funzionato:

str_replace('[', '<', $_POST['text']);    
str_replace(']', '>', $_POST['text']);

Ha funzionato ma non posso aggiungere htmlentities() ora che sto usando per prevenire XSS. Quindi, quali altre opzioni devo interrompere XSS?

    
posta Slim Shady 19.06.2016 - 11:06
fonte

1 risposta

4

Analizzare il BBCode in un modo sicuro che non apre le porte all'inferno XSS è un compito difficile, e ci sono stati molti tentativi falliti. Come noti tu stesso, il modo in cui lo fai attualmente è vulnerabile a XSS: tutto ciò che devi fare è postare [script src="evil.js"] . Il solo utilizzo di htmlentities() non risolverà questo per te, è molto più complesso. Questo blog illustra chiaramente il problema.

Quindi non ti consiglierei di provare a implementare il tuo interprete BBCode. Invece guarderei le librerie esistenti, in PHP o lato client in JavaScript e valuterei i loro record di sicurezza. Alcuni posti da cui iniziare:

Per aggiungere un ulteriore livello di sicurezza, è possibile eseguire l'HTML generato tramite un disinfettante HTML progettato per l'HTML "sandbox" e conservare eventuali tag o attributi indesiderati (come script o onerror ) nel caso in cui la libreria di BBCode debba fallire. Alcuni esempi:

Si noti che non ho valutato la sicurezza di queste librerie. Forse ci sono alternative migliori - queste sono solo fornite qui come esempi. Qualunque libreria tu scelga, dovrai controllare il suo track record e decidere da solo se ti fidi o meno. E come al solito, assicurati di mantenere aggiornate le librerie.

Poiché SilverlightFox dice nei commenti, come terzo livello di difesa (per i browser che lo supportano) puoi impostare una norma di sicurezza del contenuto che non consente gli script inline.

    
risposta data 19.06.2016 - 11:58
fonte

Leggi altre domande sui tag