Como crear llave de seguridad en los formularios

De KumbiaPHP Framework Wiki
Saltar a: navegación, buscar

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:

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:

Idioma no válido.

Necesita especificar un idioma como esto: <source lang="html4strict">...</source>

lenguajes soportados para sintaxis remarcada:

4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, rails, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, spark, sparql, sql, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic


 
<input type='hidden' id='rsa32_key' name='rsa32_key' value='7e3dd021785706cf2467bbad3382d08a13f192b3' />


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. ?>

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