Como crear llave de seguridad en los formularios
De KumbiaPHP Framework Wiki
| Articulo realizado para Spirit 1.0~b2+dev. |
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
<?phpclass 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.

