Diferencia entre revisiones de «Como crear llave de seguridad en los formularios»

De KumbiaPHP Framework Wiki
Saltar a: navegación, buscar
(Crear llave de seguridad en los formularios con Kumbiaphp)
 
Línea 1: Línea 1:
 +
{{cleanupbox
 +
|image=[[Archivo:Information_icon4.png|20px]]
 +
|texto ='''Articulo realizado para Spirit 1.0~b2+dev.'''<br />
 +
}}
  
 
Esta es una buena clase que nos permite verificar que el formulario enviado por el cliente coincide con una llave almacenada en sesion.
 
Esta es una buena clase que nos permite verificar que el formulario enviado por el cliente coincide con una llave almacenada en sesion.

Última revisión de 16:15 7 ago 2010


Esta es una buena clase que nos permite verificar que el formulario enviado por el cliente coincide con una llave almacenada en sesion.

1. Copiamos la clase y la guardamos en la siguiente dirección

miapp/libs/security_key.php

  1. <?php
  2.  
  3. class SecurityKey {
  4.  
  5.     /**
  6.      * Genera un input tipo hidden con el valor de la llave
  7.      *     
  8.      * @return string
  9.      */
  10.     public static function generateKey(){
  11.  
  12.         $h = date("G")>12 ? 1 : 0;
  13.         $time = uniqid().mktime($h, 0, 0, date("m"), date("d"), date("Y"));
  14.         $key = sha1($time);
  15.         $_SESSION['rsa32_key'] = $key;
  16.  
  17.         return "<input type='hidden' id='rsa32_key' name='rsa32_key' value='$key' />\r\n";
  18.     }
  19.  
  20.     /**
  21.      * Devuelve el resultado de la llave almacenada en sesion
  22.      * con la enviada en el form
  23.      *
  24.      * @return boolean
  25.      */
  26.     public static function isValid () {
  27.  
  28.         $key = isset($_SESSION['rsa32_key']) ? $_SESSION['rsa32_key'] : null;
  29.  
  30.         if( (!is_null($key) ) && ($key === Input::post('rsa32_key')) ) {
  31.             return true;
  32.         } else {
  33.             return false;
  34.         }
  35.     }
  36.  
  37.     /**
  38.      * Devuelve la ultima llave almacenada en sesion
  39.      *
  40.      * @return string
  41.      */
  42.     public static function getKey() {
  43.  
  44.         $key = isset($_SESSION['rsa32_key']) ? $_SESSION['rsa32_key'] : null;
  45.  
  46.         return $key;
  47.  
  48.     }
  49.  
  50. }
  51. ?>


2. Forma de uso:

  • En la vista y antes de hacer el cierre del formulario imprimimos la llave
  1. <?php echo SecurityKey::generateKey(); ?>


  • Esto nos generará un input tipo hidden asi:
 
<input type='hidden' id='rsa32_key' name='rsa32_key' value='7e3dd021785706cf2467bbad3382d08a13f192b3' />


  • En el controller o en el modelo verificamos la llave
  1. public function create () {
  2.  
  3.   if( Input::hasPost('menus') ) {
  4.  
  5.     if(SecurityKey::isValid()) { 
  6.  
  7.       $menu = new Menus(Input::post('menus'));
  8.  
  9.       if(!$menu->save()){
  10.  
  11.         Flash::error('Falló Operación');
  12.  
  13.       }else{
  14.  
  15.         Flash::valid('Operación exitosa');
  16.         Input::delete();
  17.  
  18.       }
  19.  
  20.     } else {
  21.  
  22.       Flash::error('Acceso incorrecto al sistema');
  23.  
  24.     }
  25.  
  26.   }  
  27.  
  28. }


Para cualquier comentario referente a esta clase, puedes acudir al IRC, la lista de correo o el Foro de KumbiaPHP.