Seguridad en PHP : filtrar numeros y cadenas

La Seguridad en PHP se realiza filtrando las entradas del usuario, esto se debe realizar obligatoriamente para no tener en un futuro algunas sorpresas desagradables en nuestro servidor, estos consejos para validación de entradas en nuestras aplicaciones con PHP nos facilitaran el proceso.

Validar solo números

Si la entrada es una edad o algún valor numérico pequeño, podemos usar simplemente el CAST (int) de PHP

$numero = (int)$_POST['edad'];

Pero si nuestra entrada es una cadena de números podemos utilizar la siguiente expresion regular que filtrara de nuestra variable todos los caracteres que no sean numéricos

$output = preg_replace("/[^0-9-.]/", "", $data);

Esto permitirá también valores negativos y decimales.

Eliminar etiquetas HTML

Si deseas eliminar toda etiqueta HTML de una cadena puedes utilizar la función strip_tags, o si solo deseas que se muestre puedes encodificarlas con htmlspecialchars y no causara problemas al momento de mostrarlo.

$text = '<p>Test paragraph.</p>
<!-- Comment --> 
<a href="#fragment">Other text</a>';
echo strip_tags($text);

// Permite <p> y <a>
echo strip_tags($text, '<p><a>');

Filtrando cadenas en MySQL

Utilizando mysql_real_escape_string podemos filtrar las cadenas antes de enviarlas en una consulta SQL, esto para prevenir inyecciones SQL, si utilizamos PDO con PHP esto ya no es necesario porque lo tienen integrado.

$user = mysql_real_escape_string($_POST['username']); //'aidan';
$pass = mysql_real_escape_string($_POST['password']); //"' OR ''='";

$query = "SELECT * FROM users WHERE user='$user' AND password='$pass'";
mysql_query($query);

Utilizar filter_input

Si utilizas $_GET['id'] puedes utilizar esta alternativa y de paso filtrar valores al mismo tiempo

$itemId = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_SPECIAL_CHARS);

Se pueden utilizar como parámetro INPUT_POST, INPUT_COOKIE, INPUT_SERVER o INPUT_ENV

Que te parecieron estos consejos?, utilizas alguna validación más en tus aplicaciones?, puedes comentarlo y discutiremos alternativas y mejoras.

vía: ReadWriteWeb.com

También te puede interesar

3 Comments

  1. juan
    oct 15, 2010 @ 13:41:28

    Filtrar numeros o cadenas o Validar los datos de usuario es mucho mas eficiente hacerlo de lado del cliente con JavaScript.

    Reply

    • craftyman
      oct 15, 2010 @ 23:12:39

      Juan, en realidad se debe realizar de los dos lados (cliente y servidor), con Javascript es mas comodo para el usuario mostrarle los errores y no obligarlo a procesar datos y volver a cargar la pagina, pero cuando el usuario tiene malas intenciones y deshabilita el javascript puede haber un hueco en nuestra aplicación, es por eso que también tiene que realizarse la validación del lado del servidor.

      Saludos.

      Reply

  2. MTN
    nov 12, 2010 @ 06:18:02

    Que alternativas hay para evitar el Cross site scripting ? Coincido con que Javascript no es una solución a los fines de evitar los ataques.

    Muchas Gracias !

    Reply

Leave a Reply