tomar datos de un checkbox
Rodrigo Fuentealba
darkprox en gmail.com
Dom Ene 15 15:14:52 CLST 2006
Luis Vega wrote:
> Nop, se refiere a problemas con la inserción de código (SQL, JavaScript,
> HTML, etc...). el isset solamente valida si es que la variable existe o
> no, pero esa variable puede contener no solamente datos como el RUT,
> sino tambien porciones de código como <script>alert('Hay un virus en tu
> PC');</script> o peor aun, código que borre las bases de datos MySQL.
>
> Si tienes: select * from usuarios where rut = '$_POST['rut']';
>
> evalúa con rut = [12345678-9]. OK:
> select * from usuarios where rut = '12345678-9';
>
> pero, evalúa con rut = [1-9' or '1'='1]
> select * from usuarios where rut = '1-9' or '1'='1';
>
> "UPS", al menos una de ambas condiciones será verdadera, por lo que te
> mostrará todos los datos de la BD que pueden ser hartos.
>
> Ni siquiera estoy seguro de que el ejemplo que puse funcione, pero es
> para que entiendas la idea de que la inserción de código es un problema
> serio y es tan fácil como "Complete L'Oración..."
>
>
> Seria una alternativa usar la funcion htmlentities()
> La estube probando ayer y funciono muy bien. de todas formas es mejor
> hacer las validaciones correspondientes (estoy en fase de aprendizaje).
>
> saludos y gracias por responder.
> p.d. aun no pude resolver el problema de los checkbox
>
>
>
>
>
> --
> Luis Vega M.
> Linux Registered User #356394
> GnuPG v1.4.1-1 (Debian GNU/Linux)
> PG-ID: C0778DD2 <fodsite AT gmail DOT com>
> http://fodsite.webcindario.com
A ver, yo tengo un archivo php con funciones de validaciones que te
pueden servir. Las pones en un archivo (p.ej. validar.php) y las llamas
con require_once, de esta forma:
require_once 'validar.php';
El script es un poco largo, pero sirve. Por ejemplo, para saber si un
string contiene SQL o no, puedes usar la funcion revisar_sql(); míralo,
quizás te sirva. A pesar de que las funciones built-in en PHP son
mejores, muchas veces pasa que no nos acordamos de la función que sirve
para nuestro propósito.
-------------- 8< corte aqui 8< --------------
<?php
/**********************************************************************/
/* Funciones para sanitizar las entradas de usuario */
/**********************************************************************/
/*************************/
/* definiciones de flags */
/*************************/
define("PARANOICO",1);
define("SQL",2);
define("SISTEMA", 4);
define("HTML", 8);
define("ENTERO", 16);
define("FLOTANTE", 32);
define("LDAP", 64);
define("UTF8", 128);
/******************************************************************/
/* busqueda de configuracion de registros globales y magic quotes */
/******************************************************************/
$register_globals = (bool) ini_get('register_globals');
$magic_quotes = (bool) ini_get('magic_quotes_gpc');
/************************************/
/* definicion de registros globales */
/************************************/
if ($register_globals)
{
define("REGISTER_GLOBALS", 1);
}
else
{
define("REGISTER_GLOBALS", 0);
}
/********************************/
/* definicion de quotes magicos */
/********************************/
if ($magic_quotes)
{
define("MAGIC_QUOTES", 1);
}
else
{
define("MAGIC_QUOTES", 0);
}
/*****************************************************/
/* funcion para reemplazar caracteres en cada cadena */
/*****************************************************/
function reemplazar_caracteres($string)
{
$caracteres_invalidos == array("'","\"");
return str_replace($caracteres_invalidos,"",$string);
}
/*****************************************************/
/* funcion para el addslashes con o sin magic_quotes */
/*****************************************************/
function agregarslashes($string)
{
if(MAGIC_QUOTES)
{
return $string;
}
else
{
return addslashes($string);
}
}
/********************************************************/
/* funcion para sanitizar de manera paranoica un string */
/********************************************************/
function sanitizar_paranoico($string, $min='', $max='')
{
$string = preg_replace("/[^a-zA-Z0-9]/", "", $string);
$largo = strlen($string);
if((($min != '') && ($largo < $min)) || (($max != '') && ($largo > $max)))
{
return FALSE;
}
else
{
return $string;
}
}
/************************************************************/
/* funcion para sanitizar un string de posibles inserciones */
/************************************************************/
function sanitizar_sistema($string, $min='', $max='')
{
$patron = '/(;|\||`|>|<|&|^|"|'."\n|\r|'".'|{|}|[|]|\)|\()/i';
/*
sin pipes, variables de entorno, comandos separados, ejecucion embebida,
redireccion a archivo, procesamiento en segundo plano, comandos
especiales, quotes, lines nuevas u otros caracteres especiales
*/
$string = preg_replace($patron, '', $string);
$string = '"'.preg_replace('/\$/', '\\\$', $string).'"';
$largo = strlen($string);
if((($min != '') && ($largo < $min)) || (($max != '') && ($largo > $max)))
{
return FALSE;
}
else
{
return $string;
}
}
/**************************************/
/* funcion para sanitizar cadenas sql */
/**************************************/
function sanitizar_sql($string, $min='', $max='')
{
$string = agregarslashes($string);
$patron = "/;/";
$string = preg_replace($patron, '', $string);
$largo = strlen($string);
if((($min != '') && ($largo < $min)) || (($max != '') && ($largo > $max)))
{
return FALSE;
}
else
{
return $string;
}
}
/********************************************/
/* funcion para sanitizar un string de LDAP */
/********************************************/
function sanitizar_ldap($string, $min='', $max='')
{
$patron = '/(\)|\(|\||&)/';
$string = preg_replace($patron, '', $string);
$largo = strlen($string);
if((($min != '') && ($largo < $min)) || (($max != '') && ($largo > $max)))
{
return FALSE;
}
else
{
return $string;
}
}
/*************************************************/
/* funcion para sanitizar un string de tags HTML */
/*************************************************/
function sanitizar_html($string, $min='', $max='')
{
$patron[0] = '/\&/'; $reemplazo[0] = '&';
$patron[1] = '/</'; $reemplazo[1] = '<';
$patron[2] = "/>/"; $reemplazo[2] = '>';
$patron[3] = '/\n/'; $reemplazo[3] = '<br>';
$patron[4] = '/"/'; $reemplazo[4] = '"';
$patron[5] = "/'/"; $reemplazo[5] = ''';
$patron[6] = "/%/"; $reemplazo[6] = '%';
$patron[7] = '/\(/'; $reemplazo[7] = '(';
$patron[8] = '/\)/'; $reemplazo[8] = ')';
$patron[9] = '/\+/'; $reemplazo[9] = '+';
$patron[10] = '/-/'; $reemplazo[10] = '-';
$string = preg_replace($patron, $reemplazo, $string);
$largo = strlen($string);
if((($min != '') && ($largo < $min)) || (($max != '') && ($largo > $max)))
{
return FALSE;
}
else
{
return $string;
}
}
/***********************************************/
/* funcion para hacer que un entero sea entero */
/***********************************************/
function sanitizar_entero($entero, $min='', $max='')
{
$entero = intval($entero);
if((($min != '') && ($entero < $min)) || (($max != '') && ($entero >
$max)))
{
return FALSE;
}
else
{
return $entero;
}
}
/*********************************************/
/* funcion para hacer que un float sea float */
/*********************************************/
function sanitizar_flotante($flotante, $min='', $max='')
{
$flotante = floatval($flotante);
if((($min != '') && ($flotante < $min)) || (($max != '') &&
($flotante > $max)))
{
return FALSE;
}
else
{
return $flotante;
}
}
/******************************************************/
/* funcion para sanitizar con todas las posibilidades */
/******************************************************/
function sanitizar($entrada, $flags, $min='', $max='')
{
if($flags & UTF8)
{
$entrada = decodificar_utf8($entrada);
}
if($flags & PARANOICO)
{
$entrada = sanitizar_paranoico($entrada, $min, $max);
}
if($flags & ENTERO)
{
$entrada = sanitizar_entero($entrada, $min, $max);
}
if($flags & FLOTANTE)
{
$entrada = sanitizar_flotante($entrada, $min, $max);
}
if($flags & HTML)
{
$entrada = sanitizar_html($entrada, $min, $max);
}
if($flags & SQL)
{
$entrada = sanitizar_sql($entrada, $min, $max);
}
if($flags & LDAP)
{
$entrada = sanitizar_ldap($entrada, $min, $max);
}
if($flags & SISTEMA)
{
$entrada = sanitizar_sistema($entrada, $min, $max);
}
return $entrada;
}
/*****************************************************************/
/* funcion para chequear si un string pasa la prueba de paranoia */
/*****************************************************************/
function revisar_paranoico($entrada, $min='', $max='')
{
if($entrada != sanitizar_paranoico($entrada, $min, $max))
{
return FALSE;
}
else
{
return TRUE;
}
}
/***************************************************************/
/* funcion para chequear si un string pasa la prueba de entero */
/***************************************************************/
function revisar_entero($entrada, $min='', $max='')
{
if($entrada != sanitizar_entero($entrada, $min, $max))
{
return FALSE;
}
else
{
return TRUE;
}
}
/*****************************************************************/
/* funcion para chequear si un string pasa la prueba de flotante */
/*****************************************************************/
function revisar_flotante($entrada, $min='', $max='')
{
if($entrada != sanitizar_flotante($entrada, $min, $max))
{
return FALSE;
}
else
{
return TRUE;
}
}
/*****************************************************************/
/* funcion para chequear si un string pasa la prueba de html tag */
/*****************************************************************/
function revisar_html($entrada, $min='', $max='')
{
if($entrada != sanitizar_html($entrada, $min, $max))
{
return FALSE;
}
else
{
return TRUE;
}
}
/************************************************************/
/* funcion para chequear si un string pasa la prueba de sql */
/************************************************************/
function revisar_sql($entrada, $min='', $max='')
{
if($entrada != sanitizar_sql($entrada, $min, $max))
{
return FALSE;
}
else
{
return TRUE;
}
}
/*************************************************************/
/* funcion para chequear si un string pasa la prueba de ldap */
/*************************************************************/
function revisar_ldap($entrada, $min='', $max='')
{
if($entrada != sanitizar_ldap($entrada, $min, $max))
{
return FALSE;
}
else
{
return TRUE;
}
}
/****************************************************************/
/* funcion para chequear si un string pasa la prueba de sistema */
/****************************************************************/
function revisar_sistema($entrada, $min='', $max='')
{
if($entrada != sanitizar_sistema($entrada, $min, $max))
{
return FALSE;
}
else
{
return TRUE;
}
}
/******************************************************/
/* funcion para sanitizar con todas las posibilidades */
/******************************************************/
function revisar($entrada, $flags, $min='', $max='')
{
$entradavieja = $entrada;
if($flags & UTF8)
{
$entrada = decodificar_utf8($entrada);
}
if($flags & PARANOICO)
{
$entrada = sanitizar_paranoico($entrada, $min, $max);
}
if($flags & ENTERO)
{
$entrada = sanitizar_entero($entrada, $min, $max);
}
if($flags & FLOTANTE)
{
$entrada = sanitizar_flotante($entrada, $min, $max);
}
if($flags & HTML)
{
$entrada = sanitizar_html($entrada, $min, $max);
}
if($flags & SQL)
{
$entrada = sanitizar_sql($entrada, $min, $max);
}
if($flags & LDAP)
{
$entrada = sanitizar_ldap($entrada, $min, $max);
}
if($flags & SISTEMA)
{
$entrada = sanitizar_sistema($entrada, $min, $max);
}
if($entradavieja != $entrada)
{
return false;
}
else
{
return true;
}
}
/********************************************************/
/* funcion para validar el digito verificador de un RUT */
/********************************************************/
function digito_verificador($r)
{
$s=1;
for($m=0;$r!=0;$r/=10)
{
$s=($s+$r%10*(9-$m++%6))%11;
}
return chr($s?$s+47:75);
}
/************************************************/
/* funcion que retorna si el RUT es valido o no */
/************************************************/
function validar_rut($entero, $digito)
{
$entero = sanitizar_paranoico($entero);
$digito = sanitizar_paranoico($digito);
if($digito!=digito_verificador($entero))
{
return FALSE;
}
else
{
return TRUE;
}
}
?>
----- 8< corte aqui 8< -----
--
Rodrigo Fuentealba Cartes
Tecnico Analista Programador
Registered User #387639 - http://counter.li.org
Más información sobre la lista de distribución PHP