PHP proporciona una serie de funciones que pueden ser muy útiles para el tratamiento de strings, en especial aquellas que proporcionan
seguridad ya que si algo es importante en PHP es ésto, ya que de nada sirve un diseño bonito, si después el sistema es fácilmente vulnerable.
htmlspecialchars: convierte caracteres especiales HTML a su correspondiente entidad HTML
Constantes interesantes:
ENT_COMPAT : Convertirá las comillas dobles y sólo dejará las comillas simples.
ENT_QUOTES : Convertirá tanto las comillas dobles como las simples.
ENT_NOQUOTES : Dejará tanto las comillas dobles como las simples sin convertir.
echo htmlspecialchars("<script>document.location.reload();</script>'quería' \"hackear\"", ENT_QUOTES); /*Si observas el código fuente regresa: <script>document.location.reload();</script>'quería' "hackear"*/
htmlentities: es prácticamente igual a htmlspecialchars salvo que reemplaza todos los caracteres que contienen su respectivo equivalente como entidad HTML
Constantes interesantes:
ENT_COMPAT : Convertirá las comillas dobles y deja solo las comillas sencillas.
ENT_QUOTES : Convertirá tanto las comillas dobles como las sencillas.
ENT_NOQUOTES : Dejará tanto las comillas dobles como las sencillas sin convertir.
echo htmlentities("<script>document.location.reload();</script>'quería' \"hackear\""); /*Si observas el código fuente regresa: <script>document.location.reload();</script>'quería' "hackear"*/
La diferencia entre htmlspecialchars y htmlentities es casí inapreciable a simple vista, pero si observas la diferencia entre ambas cadenas
el carácter acentuado con htmlentities también es codificado a su entidad HTML.
addslashes: coloca una barra invertida \ delante de los caracteres que necesitan escaparse, estos caracteres son las comillas ', las
comillas dobles ", y la barra invertida \, esta función para realizar consultas a una base de datos es útil cuando este método de escape es
soportado, si no es el caso, hay que utilizar las funciones especificas de cada SGBD, mysqli_real_escape_string() para MySQL, pg_escape_literal(), pg_escape_string() para PostgreSQL
echo addslashes("'1 OR '1'='1"); #Regresa: \'1 OR \'1\'=\'1 evitando así la inyección sql
mysqli_real_escape_string: proporciona seguridad a una consulta realizada a una base de datos mysql, escapando caracteres no deseados como: ' " \
$conexion = new mysqli("localhost", "root", "password", "pruebas"); $root = mysqli_real_escape_string($conexion, "'1 OR '1'='1"); $consulta = "SELECT * FROM usuarios WHERE root='$root'"; $resultado = $conexion -> query($consulta);
quotemeta: escapa de la cadena seleccionada los siguientes caracteres: . \ + * ? [ ^ ] ( $ )
echo quotemeta("<?php function(){} ?>"); #Regresa: <\?php function\(\){} \?>
No hay comentarios:
Publicar un comentario