Pregunta

Pregunta simple que me sigue molestando.

¿Debo codificar HTML de forma inmediata la entrada del usuario y almacenar el contenido codificado en la base de datos, o debo almacenar los valores en bruto y la codificación HTML cuando se muestra?

El almacenamiento de datos codificados reduce considerablemente el riesgo de que un desarrollador olvide codificar los datos cuando se muestran. Sin embargo, almacenar los datos codificados hará que el ingreso de datos sea un poco más engorroso y ocupará un poco más de espacio, aunque eso no suele ser un problema.

¿Fue útil?

Solución

Yo sugeriría encarecidamente la codificación de la información en la salida. almacenar datos sin procesar en la base de datos es útil si desea cambiar la forma en que se ve en un momento determinado. el flujo debe ser algo similar a:

sanitize user input -> protect against sql injection -> db -> encode for display

piense en una situación en la que podría querer mostrar la información como una fuente RSS en su lugar. tener que rehacer cualquier codificación HTML específica antes de volver a mostrarla parece un poco tonto. cualquier desarrollo debe seguir siempre el " no confíe en la entrada " meme, ya sea que la entrada sea de un usuario o de la base de datos.

Otros consejos

La codificación solo debe hacerse en la pantalla. Sin excepción.

Salida.

Con HTML, no puede simplemente verificar la longitud de una cadena ( & amp; amcode; es de 1 carácter, pero strlen () le dirá 5), puede recórtelo fácilmente (podría romper entidades).

Es posible que deba mezclar cadenas de la base de datos con cadenas de otra fuente, o leerlas y escribirlas. Hacer esto en toda la aplicación sin perder ningún escape y evitar el doble escape es una pesadilla.

PHP intentó hacer algo similar con magic_quotes y resultó ser un gran fracaso. ¡No tome la ruta magic_entities ! :)

Tenga en cuenta que es posible que deba acceder a la base de datos con algo que no comprenda el texto codificado en HTML (por ejemplo, una herramienta de informes). Estoy de acuerdo en que el espacio no es un problema, pero en mi humilde opinión, poner la codificación HTML en la base de datos mueve el conocimiento de su vista / front end al nivel más bajo de la aplicación, y eso es un error de diseño.

¿Esto no anula el propósito de la codificación? Si se ingresa un script sql malicioso como entrada, que luego se pasa a la base de datos podría causar un gran problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top