El punto más importante a destacar, en mi humilde opinión, es que debes saber qué contiene una variable (o campo de base de datos). Debe saber si es texto (y qué conjunto de caracteres / codificación es, en ese caso), o si es HTML (o un atributo HTML, que es otro tipo de datos), o SQL, etc.
Luego, debe aplicar a las conversiones adecuadas cuando necesite pasar de una a otra.
El gran problema es que en muchos casos, la representación de un fragmento de texto (probablemente el tipo más común de datos que puede manipular) es la misma ya sea de texto, HTML, SQL, etc. (el texto "abc" es el mismo que el HTML abc
o el SQL 'abc'
) y por esta razón las personas tienden a concatenar bits sin ninguna conversión.
Pero eso se romperá tan pronto como se encuentre con cualquier personaje que tenga un significado especial en uno de los contextos. Esto no solo conduce a problemas de seguridad (inyecciones de XSS y de SQL), sino también a problemas de formato (todos hemos visto sitios que comienzan a mostrar entidades HTML como <
cuando deberían mostrar <
), ya que la gente olvida La conversión, o hacerlo varias veces.
Es bastante raro que realmente necesite permitir la entrada de HTML real. En la mayoría de los casos, desea texto. Solo mantén el texto como está, manipulalo tal como es. Pero una vez que desee mostrarlo (en una página HTML), conviértalo a HTML (utilizando bibliotecas / marcos estándar y probados , no su búsqueda y reemplazo improvisados basados en expresiones regulares).
Del mismo modo, lo convierte cuando desea compilar una solicitud de SQL (utilizando consultas parametrizadas, de preferencia). Pero todavía lo guardas exactamente como está.
Muchos marcos agregarán capas de abstracción que "ocultarán" todo esto si realmente los usas. Pero todos sabemos que, incluso con las mejores herramientas, siempre terminará con alguien que intente crear un poco de HTML, por lo que necesitan saber qué se debe hacer si lo hacen.
Si desea / necesita manipular el HTML real, ingrese una dimensión completamente diferente en términos de problemas de XSS. Tenga en cuenta que se puede cubrir en una hora ...