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_NOQUOTESno está establecido. -
"'" (comilla simple) se convierte en ''' (o ')
sólo cuando
ENT_QUOTESestá 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