elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Aporte] Mi función PHP para limpiar inputs
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Aporte] Mi función PHP para limpiar inputs  (Leído 1,729 veces)
Alex_bro


Desconectado Desconectado

Mensajes: 1.246



Ver Perfil
[Aporte] Mi función PHP para limpiar inputs
« en: 23 Julio 2015, 18:34 pm »

Buenas!

Hoy os traigo una función que publiqué hace tiempo aquí también pero con ciertas mejoras, con la esperanza de que pueda servir a alguien más.

¿Qué permite?
  • Eliminar todos los caracteres que no estén previstos -> Security By Default
  • Cortar las cadenas con más de X caracteres si se desea. Esto puede ayudar a evitar ataques DOS dirigidos expresamente a sobrecargar las consultas a la base de datos
  • Es muy rápida y sencilla de utilizar! He visto buenos aportes en el foro que tienen la advertencia de que es necesario asegurar las variables para su uso real, ya que el compañero lo ha programado con prisas. Con esta función las prisas no deberían ser una escusa!
  • Debería ser suficiente para la mayoría de ataques SQL Injection y XSS, recomendandose encarecidamente su uso conjuntamente con sentencias preparadas (PDO o MySQLi)
  • Elimina espacios en blanco al principio y al final de la cadena, ya que no suelen tener utilidad.

¿Qué NO permite?
No está pensada para validar campos (Ej. Email correcto, etc), solo como primer filtro a pasar por todos los inputs que provengan del exterior. Para esos usos, la función nativa filter_var de PHP puede ser una alternativa.

Personalización
La función está escrita de forma que permita vocales acentuadas y eñes. Si no se desea basta con borrarlos de la cuarta linea. Si dejas estos caracteres asegurate de guardar el archivo que contiene la función con una codificación válida, como UTF-8.
Además, a modo de prevenir ataques XSS aplica la función htmlentities, pero a algunos les gusta aplicarla en la vista de su aplicación... a mi me parece mejor hacerlo al guardar los datos para optimizar la carga en la lectura de datos, pero casi es una cuestión de gustos.

El código

Código:
function clean_var($var,$num=0,$let=0,$max=0,$cars_exp=''){
        $expr = '/[^';
        if($num == 1) $expr = $expr.'0-9';
        if($let == 1) $expr = $expr.'a-zA-ZñÑáéíóúÁÉÍÓÚ';
        if($cars_exp != ''){
            $cars_ok = preg_quote($cars_exp,'/');
            $cars_ok = str_replace(' ','\s',$cars_ok);
            $expr .= $cars_ok;
        }
        $expr .= ']/iu';
        $var = preg_replace($expr,'',$var);

        if($max != 0 && strlen($var) > $max){
            $var = substr($var,0,$max);
        }
        return htmlentities(trim($var), ENT_QUOTES); //AntiXSS
}

He intentado ponerle la etiqueta php a code para que se colorease, pero muestra los acentos como entidades html en ese caso.

Ejemplos

Código
  1. $secure_var = clean_var($_GET['insecure_var'],1,0,10); // Solo numeros, max. 10 caracteres.
  2. $secure_var = clean_var($_GET['insecure_var'],1,1,10); // Solo numeros y letras, max. 10 c.
  3. $secure_var = clean_var($_GET['insecure_var'],0,1,10,' '); // Letras y espacios, max. 10 c.
  4. $secure_var = clean_var($_GET['insecure_var'],1,1,25,'@._-'); // Posible e-mail. Max 25 c.
  5. $secure_var = clean_var($_GET['insecure_var'],1,1,50,'@._-?)(][,'); // Mas caracteres. Max. 50 c.

Mejoras!
Por favor, si ves algo mejorable en la función dilo abajo! Será de gran ayuda para todos, especialmente si está relacionado con la seguridad. A veces he obtenido comportamientos extraños al usar guiones medios a pesar de usar preg_quote, y ahora intento escribirlos al final del parámetro para que no den problemas... si saben por qué ocurre eso sería genial.

Gracias por leer el tocho! :)


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Mi funcion para limpiar variables
PHP
Alex_bro 2 4,579 Último mensaje 6 Febrero 2009, 19:00 pm
por Alex_bro
Limpiar Inputs al refrescar pantalla [F1]
Desarrollo Web
Maurice_Lupin 4 3,265 Último mensaje 13 Marzo 2014, 17:34 pm
por Maurice_Lupin
[Aporte][Batch] Funcion ID de red
Scripting
Zomkar 2 1,941 Último mensaje 21 Mayo 2014, 04:59 am
por Zomkar
Duda - Una funcion para limpiar la pantalla en Python
Scripting
n1sen 3 3,071 Último mensaje 1 Agosto 2017, 11:35 am
por <Trocutor>
Aporte. Funcion para poner pantalla de título a programa por consola.
Programación C/C++
@XSStringManolo 0 1,381 Último mensaje 9 Junio 2019, 05:45 am
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines