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

De KumbiaPHP Framework Wiki
 
(No se muestran 2 ediciones intermedias del mismo usuario)
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.
  
Línea 58: Línea 63:
 
?>
 
?>
 
</source>
 
</source>
 +
  
 
2. Forma de uso:
 
2. Forma de uso:
Línea 111: Línea 117:
  
 
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.
 +
 +
[[Categoría:Tutoriales KumbiaPHP]]
 +
[[Categoría:Seguridad]]

Revisión actual del 16:15 7 ago 2010

{{#if:Information icon4.png |}}

{{#if:

|}}



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.