mejor manera de prevenir el ataque xss

¿Cuál de los dos es una mejor manera de prevenir un ataque xss?

  1. HTMLEntidades al guardar en db
  2. HTMLEntidades al mostrar / repetir

Encuentro el primero mejor porque puede olvidarse de agregar esto mientras se muestra.

cuál de las dos es una mejor manera de prevenir el ataque xss.

  1. HTMLEntidades al guardar en db
  2. HTMLEntidades al mostrar / repetir

2 – debe convertir al formato de destino en el último momento posible. Esto le ahorra problemas en el futuro si usted, por ejemplo, decide que quiere usar el mismo contenido en un correo electrónico, un PDF, como un mensaje de texto para que el usuario lo edite, etc., etc.

encuentro el primero mejor porque puede olvidarse de agregar esto mientras se muestra

Es posible que también olvide al insertar en la base de datos.

Además, no todos los datos entran en la base de datos. Por ejemplo, una vista previa de datos a punto de ser insertados o datos devueltos a un formulario debido a errores son ambos posibles vectores XSS. No querrá tratar cosas como “Codificar antes de poner en la base de datos, o cuando hace eco en el documento si no proviene de una base de datos”. Las excepciones son la mejor manera de introducirse en una situación en la que olvida codificar.

La mejor manera (opción número 3) si me preguntas es usando la última extensión de filtro para manejar el filtrado por ti (PHP5). Me gusta poner filter_input_array en la parte superior de mi archivo php para protegerme contra, por ejemplo, ataques POST XSS

 $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); 

Debe leer la documentación del filtro (tutoriales) y protegerse contra XSS para obtener información.

Razones para codificar en el código de visualización (es decir, después de leer el texto de la base de datos):

  • La base de datos se puede ver en una GUI no basada en HTML que requeriría modificaciones. La modificación de herramientas de administración de bases de datos de uso general para decodificar automáticamente texto específico (¿en el juego de caracteres?) Para una sola aplicación no es factible ni deseable.
  • No codificar correctamente HTML significa que tendrá que confiar en la base de datos para estar seguro. Si alguna vez hay una vulnerabilidad, directamente en la base de datos o en otra aplicación web, su aplicación también se volverá vulnerable.
  • Almacenar HTML codificado en la base de datos impide la búsqueda; no puede usar directamente bibliotecas de búsqueda dedicadas como Lucene. Además, dado que la encoding html puede no ser biyectiva, las búsquedas de texto completo deben operar en una copia decodificada de la base de datos o decodificar todas las entradas en la base de datos, incurriendo en el rendimiento O (tamaño de la base de datos).
  • Las transiciones de encoding futuras también son mucho más sencillas si todo el código de encoding se concentra en el código de visualización.
  • La encoding aumenta el espacio de almacenamiento ocupado

No puedo pensar en ninguna razón para codificar al escribir. Mencione que puede olvidar codificar datos en la lógica de visualización, pero yo diría que es igualmente probable que lo olvide en el código de almacenamiento de la base de datos.

Una mejor manera sería strip_tags() y htmlentities() antes de guardar en db (si no le importan algunos bits de datos adicionales).

Sin embargo, asegúrese de haber tomado otras precauciones para protegerse contra la inyección de SQL, utilizando mysql_real_escape_string() o una capa de abstracción de acceso a datos de statement preparada, como PDO.