Foros del Web » Programando para Internet » PHP »

escapar cadena

Estas en el tema de escapar cadena en el foro de PHP en Foros del Web. Hola Estoy cerrando el tema de seguridad en mi pagina y tengo una consulta Hice una funcion que me permite determinar que caracteres pude contener ...
  #1 (permalink)  
Antiguo 01/12/2010, 11:37
 
Fecha de Ingreso: enero-2010
Mensajes: 128
Antigüedad: 14 años, 11 meses
Puntos: 2
escapar cadena

Hola

Estoy cerrando el tema de seguridad en mi pagina y tengo una consulta
Hice una funcion que me permite determinar que caracteres pude contener el formulario enviado por el usuario.
Primero lo controlo en javascript y despeus en php, hago basicamanete la misma consulta (pero del lado del servidor).

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, el espacio 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;	
}

Ademas me parece conveniente aplicar mysq_real_escape_string(), pero la verdad en unas paginas web encuentro que recomiendan no usarlo y en otras que si.
"Comillas magicas" esta en desuso, ¿pero mysq_real_escape_string(), debo usarla o no?.

Gracias.
  #2 (permalink)  
Antiguo 01/12/2010, 12:14
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
Respuesta: escapar cadena

mysq_real_escape_string() es el procedimiento adecuado ¿Dónde has leido eso de que no se debe utilizar?.
  #3 (permalink)  
Antiguo 02/12/2010, 06:51
 
Fecha de Ingreso: enero-2010
Mensajes: 128
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: escapar cadena

Entones si ademas de la funcion anterior utilizo esta:

Código:
Function escapa_cadena($cadena){
  if(get_magic_quotes_gpc() != 0) {
        $cadena = stripslashes($cadena);
    }
    return mysql_real_escape_string($cadena);
}
Ademas de agregar (int) a los valores numericos en las consultas SQL

¿Con esto estaria bien es tema de la seguridad de la pagina o me está faltando algo?
Dejo aclarado que soy un novato en la programacion web y que ya se que no hay nada 100% seguro.

Gracias.

Etiquetas: escapar, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:02.