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] = '&amp;';
   	$patron[1] = '/</'; 	$reemplazo[1] = '&lt;';
   	$patron[2] = "/>/"; 	$reemplazo[2] = '&gt;';
   	$patron[3] = '/\n/';	$reemplazo[3] = '<br>';
   	$patron[4] = '/"/'; 	$reemplazo[4] = '&quot;';
   	$patron[5] = "/'/";	$reemplazo[5] = '&#39;';
   	$patron[6] = "/%/";	$reemplazo[6] = '&#37;';
   	$patron[7] = '/\(/';	$reemplazo[7] = '&#40;';
   	$patron[8] = '/\)/';	$reemplazo[8] = '&#41;';
   	$patron[9] = '/\+/';	$reemplazo[9] = '&#43;';
   	$patron[10] = '/-/';	$reemplazo[10] = '&#45;';

   	$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