Ver Mensaje Individual
  #3 (permalink)  
Antiguo 01/12/2010, 07:45
Lechu_
 
Fecha de Ingreso: enero-2010
Mensajes: 128
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: revisar datos lado del servidor

Hola

estuve mirando la funcion htmlentities(), pero me parece que no me sirve mucho, en cambio hice esta funcion que evalua toda la cadena a traves del codigo ASCII, caracter a caracter.

Si la cadena evaluada tiene valores permitidos, MAYUSCULAS, minusculas, numeros, punto( . ) y guion bajo ( _ ), devuelve uno (TRUE), de lo contrario devuelve cero (FALSE), ademas compara la cadena contra un array(), de palabras reservadas, ent. sucede lo mismo, si encuentra una palabra reservada en la cadena a evaluar devuelve cero, sino 1

Código:
function revisar_string($texto, $reservadas=0){
/*=====
Esta funcion permite evaluar si en una cadena ($texto), se encuentra algun caracteres fuera de los permitidos. Los valores permitidos para esta funcion son: letras MAYUSCULAS, minusculas, numeros, 
el punto y el guion bajo(_).
Ademas permite enviar un arreglo de palabras no permitidas (no tendria sentido enviar signos no permitidos, por lo expresado en el primer párrafo). Si este arreglo no se envia, ent por defecto se carga un arreglo con palabras como: like, inner y join.
Esta funcion devolverá un valor que puede ser Cero ó Uno. Si devuelve cero, ent encontró una palabra prohibida/reservada ó algun caracter no permitido.
Si devuelve 1 (uno), la cadena contiene solo caracteres validos/permitidos.
===*/

	//Si ésta funcion devuelve cero, ent encontró una palabra prohibida/reservada ó algun caracter no permitido, por eso la variable flag empieza valiendo Cero.
	$texto=strtolower($texto);
	$largo=strlen($texto);//el strlen() empieza a contar desde uno y no desde cero.
	$flag='0';//Inicializo la variable.
	for ($i=0; $i<=($largo-1); $i++){
		$caracter=substr($texto, $i, 1);//Empieza en CERO y no en uno.
		$num_caracter=ord($caracter);
		//Caracteres permitidos: 48 al 57 -> numeros; 97 al 122 -> MAYUSCULAS; 65 al 90 -> minusculas; 46 -> punto; 95 -> guion bajo
		if ((($num_caracter>=97) AND ($num_caracter<=122)) OR (($num_caracter>=65) AND ($num_caracter<=90)) OR ($num_caracter==32) OR ($num_caracter==46) OR ($num_caracter==95)){
			$flag='1';						
		}else{
			$flag='0';
			$i=($largo-1);
		}
	}
		
	if ($flag=='1'){
		//Solo tiene sentido seguir comparando se han introducido valores validos sino informo el flag (return $flag;)
		//Ahora evaluo las palabras reservadas, a continuacion el arreglo
		if ($reservadas=='0'){
			$reservadas=array(
				'like',
				'inner',
				'join',	
			);			
		}
		
		$total_reservadas=count($reservadas);//Cuento cuantos elementos tiene el array $reservadas. Arranca a contar desde uno y no desde cero, por eso en el for de la linea siguiente voy hasta ($total_reservadas-1)
		
		for ($i=0; $i<=($total_reservadas-1); $i++){
			//$evalua= strpos($reservada['$i'], $texto);//no se puede usar strpos porque si la primera aparicion es Cero se presenta un problema, ver la referencia del manual ejemplo #1, en su lugar utilizo stristr(), busca una cadena dentro de otra y no discrimina entre mayusculas y minusculas.
			$evalua=stristr($texto, $reservadas[$i]);//busca la palabra prohibida segun el arreglo.
			//echo $evalua. "->". 
			if ($evalua!=FALSE){//O sea, si lo encuentra (==TRUE) las palabras prohibidas en la cadena $texto
				$flag='0';
				visor("palabra reservada: ". $reservadas[$i]);//Recordar que el arreglo empieza en la pos Cero  $reservadas[0], $reservadas[1], $reservadas[2], etc, etc.....
				$i=($total_reservadas-1);
			}	
		}
	}
	return $flag;	
}
Yo creo que si se aplica esta funcion + mysql_real_escape_string() + md5, estaría bastante bien, aun por su puesto no se puede asegurar que sea 100% seguro.

Diganme que les parece.