martes, 15 de mayo de 2012

Validación de formularios con Php 5


Validación de formularios con Php 5

(actualizado 20-05-2012)

La seguridad mas básica en una aplicación Web es el filtro que se le debe aplicar a los formularios. Ya que debemos garantizar que la información que se esta suministrando es la correcta o la esperada. Las razones son las siguientes:

1. Garantizar la integridad de los datos:

almacenar la información correcta en la base de datos, si se pide un número debe ser del 0123456789, si se pide un nombre deben ser letras del alfabeto, si se pide una fecha debe ser la del calendario en el orden que se solicite año-mes-día o día-mes-año.

2. Evitar las inyecciones sql:

si permitimos que el usuario digite cualquier carácter en nuestros formularios estamos corriendo un gran peligro de ser hackeados, esta técnica consiste en atacar el formulario de inicio de sesión, en el campo usuario o contraseña se debe escribir el siguiente codigo ' or 1 = ' 1 esta inyección se mezcla con tu código y se hace verdadera y tienen acceso a tu panel de control, no abarco mas sobre este tema en estos momentos pero por lo menos dejo la inquietud.

3. Java script no es seguridad:

muchas personas validan los formularios con javascript, pero no es suficiente ya que puede ser des-habilitado por el usuario desde el navegador, o crear un formulario falso con el nombre de tus campos y la ruta absoluta a donde deben llegar las variables en el atributo action del formulario. Aunque Javascript no es seguridad se recomienda utilizarlo ya que permite evitar peticiones del lado del servidor innecesarias.

Ya explicadas las razones fundamentales por la que hay que validar los formularios con Php vamos a mostrar los métodos que yo utilizo en mis proyectos. Para cada situación se crea un método, depende del usuario si desea mesclarlos, todos los métodos presentados devolverán (true) verdadero si existe el error.


VALIDAR CAMPO REQUERIDO

<?php
function requerido($valor)
{
     $valor=trim($valor);
     if(empty($valor))
     {
          return true; // Error significa que el campo esta vació
     }
     else
     {
          return false; // el campo tiene un valor
     }
}
?>
El metodo trim( ) utilizado sirve para quitar espacios en blanco al principio y al final de un texto, aquí se utiliza ya que el formulario puede ser engañado enviándole espacios en blanco con la barra espaciadora.


VALIDAR CAMPO NUMÉRICO

<?php
 function numerico($valor)
{
     if(empty($valor))
     {
           return false; //campo vacio no validar
     }
     else
     {
           if(ctype_digit($valor))
          {
               return false; // Si es un número
          }
          else
          {
                return true; // Error no es un número
          }
     } 
}
?>
De ahora en adelante no me interesa si esta vació el campo, solo si es el tipo que necesito


VALIDAR CAMPO ALFABÉTICO

<?php
function alfabetico($valor)
{
      $permitidos = '/^[A-Z üÜáéíóúÁÉÍÓÚñÑ]{1,50}$/i';
      if(empty($valor))
     {
           return false; // Campo vacio no validar
      }
      else
     {
           if (preg_match($permitidos,$valor))
          {
                return false; // Campo permitido 
          } 
          else 
          { 
                return true; // Error uno de los caracteres no hace parte de la expresión regular 
          } 
     } 
} 
?>
Esta función permite el abecedario completo a-z, A-Z, con las ñ-Ñ, los acentos como la tilde y la diéresis, todo se valida con una expresión regular. el {1,50} sirve para controlar el tamaño del texto, solo se permiten 50 caracteres, ¡claro se puede modificar !


VALIDAR CAMPO PASSWORD

<?php
function clave($valor)
{
     $busqueda=false;
     $permitidos=array("-","_",".");
     if(empty($valor))
     {
          return false; // No me interesa si esta vació
     }
     else
     {
          $tamanio=strlen($valor);
          for($j=0;$j<$tamanio;$j++)
          {
               if(in_array($valor{$j},$permitidos) || ctype_alnum($valor{$j}))
               {
                    $busqueda=false; // Carácter valido
               }
               else
               {
                    $busqueda=true; //Error este carácter no se permite
                    break;
               }
          }
     }
     return $busqueda; 
}
?>
En el array $permitidos se le agregan los caracteres o símbolos especiales aceptados en la validación, ademas de esto también se permiten los números 0123456789 y el abecedario a-z A-Z, pero no se permiten la ñ-Ñ y los acentos.


VALIDAR CAMPO FECHA FORMATO INGLÉS

<?php
function fecha($valor)
{
     $permitido="-"; // Se puede cambiar el separador de fechas
     if(empty($valor))
     {
           return false; // No validar 
     } 
     else 
     { 
          $anio=$valor{0}; 
          $mes=$valor{5}.$valor{6}; 
          $dia=$valor{8}.$valor{9};
          if((ctype_digit($valor{0}) && ctype_digit($valor{1}) && ctype_digit($valor{2}) &&  ctype_digit($valor{3})) && ($valor{4}==$permitido) && ctype_digit($valor{5}) && ctype_digit($valor{6}) && ($valor{7}==$permitido) && ctype_digit($valor{8}) && ctype_digit($valor{9}) && ($anio>=1 && $anio<=2) && ($mes<=12) && ($dia<=31)) 
          { 
               return false; // Fecha válida 
          } 
          else 
          { 
               return true; // Error fecha incorrecta 
          } 
     } 
} 
?>
Esta función valida que el año este entre 1000 y 2000, el mes menor o igual a 12, el día menor o igual a 31, y que se encuentren en el orden especificado de acuerdo al formato YYYY-MM-DD


CONTINUARA...

7 comentarios:

  1. Soy novato y en la parte de las funciones donde pones

    ?php
    function requerido($valor)
    {
    $valor=trim($valor);
    if(empty($valor))
    {
    return true; // Error significa que el campo esta vació
    }
    else
    {
    return false; // el campo tiene un valor
    }
    }
    ?>


    La variable $valor va tomar cualquier variable o solo la que se llame asi $valor

    ResponderEliminar
    Respuestas
    1. La variable $valor toma el valor que se le entrega al momento de llamar la funcion requerido("ValorATomar");... Luego dentro de la funcion $valor tendra almacenado el string "ValorATomar".

      Eliminar
  2. Una pregunta, como permites el salto de línea en la funcion albetica??

    Muchas gracias excelente código.

    ResponderEliminar
  3. como hago la seguridad o un respaldo de la base de datos

    ResponderEliminar
  4. como ago la validacion de un formato siete numeros dos letras y cinco numero (nnnnnnnllnnnnn). ayuda por favor gracias

    ResponderEliminar
  5. Ya tengo una llamada a JavaScript , puedo añadir otra llamada para validar con este código ?

    ResponderEliminar