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

De KumbiaPHP Framework Wiki
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 del 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

<?php

class SecurityKey {

    /**
     * Genera un input tipo hidden con el valor de la llave
     *     
     * @return string
     */
    public static function generateKey(){

        $h = date("G")>12 ? 1 : 0;
        $time = uniqid().mktime($h, 0, 0, date("m"), date("d"), date("Y"));
        $key = sha1($time);
        $_SESSION['rsa32_key'] = $key;
                
        return "<input type='hidden' id='rsa32_key' name='rsa32_key' value='$key' />\r\n";
    }

    /**
     * Devuelve el resultado de la llave almacenada en sesion
     * con la enviada en el form
     *
     * @return boolean
     */
    public static function isValid () {

        $key = isset($_SESSION['rsa32_key']) ? $_SESSION['rsa32_key'] : null;

        if( (!is_null($key) ) && ($key === Input::post('rsa32_key')) ) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Devuelve la ultima llave almacenada en sesion
     *
     * @return string
     */
    public static function getKey() {

        $key = isset($_SESSION['rsa32_key']) ? $_SESSION['rsa32_key'] : null;

        return $key;

    }
    
}
?>

2. Forma de uso:

  • En la vista y antes de hacer el cierre del formulario imprimimos la llave
<?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.