Al generar la salida HTLM (como lo hace para obtener datos en los campos del formulario cuando alguien está tratando de editar una publicación, o si necesita volver a mostrar el formulario porque el usuario olvidó un campo, por ejemplo), probablemente use htmlspecialchars()
: escapará a <
, >
, "
, '
y &
, según las opciones que le dé.
strip_tags
remueve etiquetas si el usuario ha introducido algunas - y por lo general no quieren algo que el usuario escribió a desaparecer simplemente ;-)
Al menos, no para el campo "contenido" :-)
Una vez que tenga lo que el usuario hizo entrada en forma (es decir, cuando el formulario ha sido enviado), tiene que escapar antes de enviarlo a la base de datos.
Ahí es donde se convierten en funciones como mysqli_real_escape_string
útil: se escapan de datos para SQL
También puede ser que desee echar un vistazo a las declaraciones preparadas, que podría ayudar un poco ;-)
with mysqli - y with PDO
No debe usar nada como addslashes
: el escaparse no depende del motor de la base de datos; es mejor/más seguro usar una función que se ajuste al motor (MySQL, PostGreSQL, ...) con el que está trabajando: sabrá exactamente qué escaparse y cómo.
Finalmente, para mostrar los datos dentro de una página:
- para los campos que no debe contener HTML, se debe utilizar
htmlspecialchars()
: si el usuario hizo etiquetas HTML de entrada, los que se mostrará como- es, y no se inyecta como HTML.
- para los campos que pueden contener HTML ... Esto es un poco más complicado: probablemente solo quiera permitir algunas etiquetas, y
strip_tags
(que puede hacer eso) no está realmente a la altura de la tarea (permitirá que los atributos de las etiquetas permitidas)
- es posible que desee echar un vistazo a una herramienta llamada HTMLPUrifier: se le permitirá especificar qué etiquetas y atributos se debe permitir - y genera HTML válido, que siempre es agradable ^^
- Esto puede llevar un tiempo calcularlo, y es probable que no desee volver a generar ese HTML cada vez que se deba mostrar; para que pueda pensar en almacenarlo en la base de datos (solo mantener ese código HTML limpio, o conservarlo tanto como el que no está limpio, en dos campos separados - ¿podría ser útil para permitir que las personas editen sus publicaciones?)
Esos son sólo unos pocos punteros ... espero que le ayudan :-)
no dude en preguntar si tiene preguntas más precisas!
Si el campo "contenido" puede contener algo de HTML, htmlspecialchars no se debe utilizar en él: se escapará todo el HTML, incluidas las etiquetas que están "permitidas" –
Exactamente. htmlspecialchars() sería para el contenido limitado al ingreso de texto básico. – rpjohnst