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

De KumbiaPHP Framework Wiki
Saltar a: navegación, buscar
Línea 1: Línea 1:
 
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.
  
Forma de uso:
+
1. Copiamos la clase y la guardamos en la siguiente dirección
 
+
En la vista y antes de hacer el cierre del formulario imprimimos la llave
+
 
+
<source lang=php line>
+
<?php echo SecurityKey::generateKey(); ?>
+
</source>
+
 
+
Esto nos generará un input tipo hidden asi:
+
 
+
<source lang=html>
+
<input type='hidden' id='rsa32_key' name='rsa32_key' value='7e3dd021785706cf2467bbad3382d08a13f192b3' />
+
</source>
+
 
+
 
+
Copiamos la clase y la guardamos en la siguiente dirección
+
  
 
miapp/libs/security_key.php
 
miapp/libs/security_key.php
Línea 73: Línea 58:
 
?>
 
?>
 
</source>
 
</source>
 +
 +
2. Forma de uso:
 +
 +
* En la vista y antes de hacer el cierre del formulario imprimimos la llave
 +
 +
<source lang=php line>
 +
<?php echo SecurityKey::generateKey(); ?>
 +
</source>
 +
 +
* Esto nos generará un input tipo hidden asi:
 +
 +
<source lang=text>
 +
<input type='hidden' id='rsa32_key' name='rsa32_key' value='7e3dd021785706cf2467bbad3382d08a13f192b3' />
 +
</source>
 +
 +
* En el controller o en el modelo verificamos la llave
 +
 +
<source lang=php>
 +
 +
public function create () {
 +
 +
  if( Input::hasPost('menus') ) {
 +
    if(SecurityKey::isValid()) {
 +
      $menu = new Menus(Input::post('menus'));
 +
      if(!$menu->save()){
 +
        Flash::error('Falló Operación');
 +
      }else{
 +
        Flash::valid('Operación exitosa');
 +
        Input::delete();
 +
      }
 +
    } else {
 +
      Flash::error('Acceso incorrecto al sistema');
 +
    }
 +
  }         
 +
}
 +
</source>
 +
  
 
Para cualquier comentario referente a esta clase, puedes acudir al IRC, la lista de correo o el Foro de KumbiaPHP.
 
Para cualquier comentario referente a esta clase, puedes acudir al IRC, la lista de correo o el Foro de KumbiaPHP.

Revisión de 00:49 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
public function create () {
 
  if( Input::hasPost('menus') ) {
    if(SecurityKey::isValid()) { 
      $menu = new Menus(Input::post('menus'));
      if(!$menu->save()){
        Flash::error('Falló Operación');
      }else{
        Flash::valid('Operación exitosa');
        Input::delete();
      }
    } else {
      Flash::error('Acceso incorrecto al sistema');
    }
  }          
}


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