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

De KumbiaPHP Framework Wiki
(Página creada con 'Copiamos la clase y la guardamos en la siguiente dirección miapp/libs/security_key.php <source lang=php line> <?php class SecurityKey { /** * Genera un input tipo ...')
 
 
(No se muestran 6 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
Copiamos la clase y la guardamos en la siguiente dirección
+
{{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.
 +
 
 +
1. Copiamos la clase y la guardamos en la siguiente dirección
  
 
miapp/libs/security_key.php
 
miapp/libs/security_key.php
Línea 18: Línea 25:
 
         $time = uniqid().mktime($h, 0, 0, date("m"), date("d"), date("Y"));
 
         $time = uniqid().mktime($h, 0, 0, date("m"), date("d"), date("Y"));
 
         $key = sha1($time);
 
         $key = sha1($time);
         $_SESSION['key'] = $key;
+
         $_SESSION['rsa32_key'] = $key;
 
                  
 
                  
         return "<input type='hidden' id='key' name='key' value='$key' />\r\n";
+
         return "<input type='hidden' id='rsa32_key' name='rsa32_key' value='$key' />\r\n";
 
     }
 
     }
  
Línea 31: Línea 38:
 
     public static function isValid () {
 
     public static function isValid () {
  
         $key = isset($_SESSION['key']) ? $_SESSION['key'] : null;
+
         $key = isset($_SESSION['rsa32_key']) ? $_SESSION['rsa32_key'] : null;
  
         if( (!is_null($key) ) && ($key === Input::post('key')) ) {
+
         if( (!is_null($key) ) && ($key === Input::post('rsa32_key')) ) {
 
             return true;
 
             return true;
 
         } else {
 
         } else {
Línea 47: Línea 54:
 
     public static function getKey() {
 
     public static function getKey() {
  
         $key = isset($_SESSION['key']) ? $_SESSION['key'] : null;
+
         $key = isset($_SESSION['rsa32_key']) ? $_SESSION['rsa32_key'] : null;
  
 
         return $key;
 
         return $key;
Línea 56: Línea 63:
 
?>
 
?>
 
</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 line>
 +
 +
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.
 +
 +
[[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.