PHP - È sicuro che HTML HTML file_put_content sia sicuro?

3

Ho intenzione di creare un sito web per consentire alle persone di modificare / personalizzare le loro storie.

Diciamo che le storie memorizzeranno molti tag html (paragrafo, immagini e video)

Sto pensando di utilizzare alcuni plug-in per consentire all'utente di modificare il proprio codice HTML, caricare immagini e amp; ecc.

  1. Dopo che l'utente ha terminato la modifica di html / personalizza le sue storie
  2. Il mio codice PHP sarà file_put_contents nella directory come stories-un1qu3-123.html
  3. Mentre file_put_contents, il mio codice php rimuoverà <script> tag e onload,onclick,etc sull'html che POST sul server.
  4. Quando altri utenti pubblici vedono le storie, il mio sistema lo farà file_get_contents di html.

Posso sapere che questo approccio è sicuro?

Volevo salvare come .html perché sto cercando di evitare la query sul database e caricare subito .html , potrebbe essere più veloce nell'anteprima delle storie.

Ci sono alcune ricerche su è solo un modo per memorizzare le storie (HTML), è a:

  1. separa i tag / paragrafi / immagini HTML in formato JSON

  2. quindi POST a backend > sanitizza > elimina tutto il tag > invia al database

  3. quando l'utente pubblico visualizza, ha bisogno di connettere il database > recupera il testo JSON > quindi convertire / renderlo in formato html leggibile?

Grazie!

    
posta Mavichow 07.03.2016 - 05:16
fonte

1 risposta

5

May I know this approach is it safe?

No, non è sicuro perché stai cercando di rimuovere i tag. Piuttosto che usare una lista nera, ti consiglio di utilizzare un approccio alla lista bianca. La lista bianca definisce quali tag HTML gli utenti possono usare.

Rimuovendo solo i tag <script> e gli eventi on-javascript non sono sufficienti.

Che cosa succede se inserisco il seguente carico utile:

<scr<script>ipt>alalertert('xss')</scr</script>ipt> 

Il tuo codice rileverà i tag <script> , alert e </script> nel mio payload e lo rimuoverò. Il risultato sarà (XSS):

<script>alert('xss')</script> e questo sarà "pop".

Cerca di non reinventare la ruota qui. Sono sicuro che su internet ci sono script relativamente sicuri che possono farlo, dato che non sei il primo a usare funzionalità come questa. Dai un'occhiata al link per avere un'idea.

Inoltre, consiglierei di cercare in un framework PHP sicuro come base per la vostra applicazione per evitare altri problemi di sicurezza comuni come l'iniezione SQL e il falsificatore di richieste cross-site.

    
risposta data 07.03.2016 - 05:52
fonte

Leggi altre domande sui tag