PHP - ¿Es seguro el file_put_content raw HTML?

3

Planeo crear un sitio web para que las personas puedan editar / personalizar sus historias.

Digamos que las historias almacenarán muchas etiquetas html (párrafo, imágenes y video)

Estoy pensando en usar algunos complementos de javascript para permitir que el usuario edite su html, suba las imágenes y amp; etc.

  1. Después de que el usuario termine de editar el html / personalice sus historias
  2. Mi código PHP será file_put_contents al directorio como stories-un1qu3-123.html
  3. Mientras file_put_contents, mi código php eliminará la etiqueta <script> y onload,onclick,etc en el html que se envía al servidor.
  4. Cuando otro usuario público vea las historias, mi sistema lo hará file_get_contents del html.

¿Puedo saber si este enfoque es seguro?

Quería guardar como .html porque estoy tratando de evitar una consulta en la base de datos y de inmediato cargar .html , puede ser que esto sea más rápido en la vista previa de las historias.

Me gustaría investigar un poco sobre esta única forma de almacenar las historias (HTML), es:

  1. separe las etiquetas / párrafos / imágenes html en formato JSON

  2. y luego POST para backend > desinfectar > quitar toda la etiqueta > enviar a la base de datos

  3. cuando la vista del usuario sea pública, es necesario conectar la base de datos > recuperar el texto JSON > luego convertirlo / renderizarlo en formato html legible?

¡Gracias!

    
pregunta Mavichow 07.03.2016 - 05:16
fuente

1 respuesta

5
  

¿Puedo saber que este enfoque es seguro?

No, esto no es seguro ya que estás intentando quitar las etiquetas. En lugar de utilizar una lista negra, recomiendo que utilice un enfoque de lista blanca. La lista blanca define qué etiquetas HTML pueden usar los usuarios.

Al eliminar solo las etiquetas <script> y javascript on-events no es suficiente.

¿Qué pasará si ingreso la siguiente carga útil?

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

Su código detectará las etiquetas <script> , alert y </script> en mi carga y lo eliminará. El resultado será (XSS):

<script>alert('xss')</script> y esto "aparecerá".

Intenta no reinventar la rueda aquí. Estoy seguro de que hay scripts relativamente seguros en Internet que pueden hacer esto, ya que no eres la primera persona en utilizar funcionalidades como esta. Echa un vistazo a enlace para obtener alguna idea.

Además, recomendaría buscar en un marco PHP seguro como base para su aplicación para evitar otros problemas de seguridad comunes, como la inyección de SQL y la falsificación de solicitudes entre sitios.

    
respondido por el Jeroen - IT Nerdbox 07.03.2016 - 05:52
fuente

Lea otras preguntas en las etiquetas