Bienvenid@s, hoy vamos a ver una función muy útil para prevenir la posible introducción de código malicioso a través de
campos de formularios o lo que es lo mismo, ataques XSS.
La función se llama htmlspecialchars y esta función tiene de especial que transforma ciertos
símbolos que son interpretados como parte del lenguaje a su entidad HTML correspondiente, es decir, ...
- '&' (et) se convierte en '&'
-
'"' (comillas dobles) se convierte en '"' cuando
ENT_NOQUOTES
no está establecido. -
"'" (comilla simple) se convierte en ''' (o ')
sólo cuando
ENT_QUOTES
está establecido. - '<' (menor que) se convierte en '<'
- '>' (mayor que) se convierte en '>'
Para verlo más claro, el siguiente ejemplo contiene dos formularios en uno se filtrarán los datos a través de htmlspecialchars,
en el otro no se le aplicará ningún filtro, con las correspondientes consecuencias de seguridad que puede provocar ...
Código de ejemplo ...
<?php /* By http://php-estudios.blogspot.com */ $resultado = ""; //Resultado con htmlspecialchars if (isset($_POST["con"])) { $resultado = "<p>Con htmlspecialchar: ".htmlspecialchars($_POST["con"])."</p>"; } //Resultado sin htmlspecialchars if (isset($_POST["sin"])) { $resultado = "<p>Sin htmlspecialchar: ".$_POST["sin"]."</p>"; } ?> <!DOCTYPE HTML> <html> <head> <title>Seguridad PHP con htmlspecialchars</title> </head> <body> <!--Formulario para la comprobación con htmlspecialchars--> <form method="post" name="conspecialchars" action="<?php $_SERVER['PHP_SELF']; ?>"> Con htmlspecialchars...<input type="text" name="con" size="40" value="<script>alert('XSS');</script>"> <input type="submit" value="Enviar"> </form> <hr> <!--Formulario para la comprobación sin htmlspecialchars--> <form method="post" name="sinspecialchars" action="<?php $_SERVER['PHP_SELF']; ?>"> Sin htmlspecialchars...<input type="text" name="sin" size="40" value="<script>alert('XSS');</script>"> <input type="submit" value="Enviar"> </form> <!--Caja dónde se mostrará el resultado del envío de formularios--> <div> <?php echo $resultado; ?></div> </body> </html>
No hay comentarios:
Publicar un comentario