Foros del Web » Programando para Internet » PHP »

Limpiar Injecciones SQL en input con largo maximo

Estas en el tema de Limpiar Injecciones SQL en input con largo maximo en el foro de PHP en Foros del Web. Hola a todos!, queria hacerles una pregunta que quizas tiene mas de conceptual que de practica. Tengo 2 inputs para que el usuario guarde en ...
  #1 (permalink)  
Antiguo 23/03/2013, 12:31
 
Fecha de Ingreso: marzo-2012
Mensajes: 102
Antigüedad: 12 años, 1 mes
Puntos: 1
Limpiar Injecciones SQL en input con largo maximo

Hola a todos!,
queria hacerles una pregunta que quizas tiene mas de conceptual que de practica.

Tengo 2 inputs para que el usuario guarde en mi base con largo max. (50 y 150 caracteres).

El tema es que utilizo las funciones que copio debajo para limpiar cualquier input de sentencias maliciosas (injecciones), y estas al encontrar un caracter no permitido, agregan mas caracteres para subsanar. Esto no me conviene ya que si el usuario uso los 150 caracteres, el final podria quedar mayor a esa cifra.

Estas son las funciones para limpiar:

Código:
function cleanInput($input) {
	$search = array(
		'@<script[^>]*?>.*?</script>@si',   // Strip out javascript
		'@<[\/\!]*?[^<>]*?>@si',            // Strip out HTML tags
		'@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
		'@<![\s\S]*?--[ \t\n\r]*>@'         // Strip multi-line comments
	);
	$output = preg_replace($search, '', $input);
	return $output;
}
function sanitize($input) {
    if (is_array($input)) {
        foreach($input as $var=>$val) {
            $output[$var] = sanitize($val);
        }
    }
    else {
        if (get_magic_quotes_gpc()) {
            $input = stripslashes($input);
        }
        $input  = cleanInput($input);
        $output = mysql_real_escape_string($input);
    }
    return $output;
}
function stripString($string, $num){
	$string = substr($string, 0, $num);
	return $string;
}
Que deberia hacer.. modificar la funcion para que en vez de agregar directamente remueva, o bien, con jquery bloquear ciertas teclas (no conozco todas las injeccioens que puede realizarse)?


desde ya agradezco cualquier ayuda que me esclaresca esta cuestion..
adios!
  #2 (permalink)  
Antiguo 23/03/2013, 16:22
 
Fecha de Ingreso: septiembre-2011
Mensajes: 219
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: Limpiar Injecciones SQL en input con largo maximo

Mmm, dos cuestiones:

- Limpiar implica remover. Como limpiar una casa, se elimina la suciedad, no se la acomoda en un lugar donde no moleste). Por lo tanto, cualquier cosa que no debería estar en el string debería desaparecer.

- El límite que impones en tus inputs es concerniente al usuario, procesos que luego amplifiquen o disminuyan la longitud ya es una cuestión del sistema, en este caso la base. Si la base está preparada para recibir solo 150 caracteres, entonces si es un problema. Si preparas la base para recibir un poco mas, teniendo en cuenta la validación, el problema deja de ser tal.

Saludos
  #3 (permalink)  
Antiguo 25/03/2013, 15:49
 
Fecha de Ingreso: marzo-2012
Mensajes: 102
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Limpiar Injecciones SQL en input con largo maximo

antes que anda gracias cachusan por responder..

1) concuerdo respecto a la limpieza. Pero en vista de que eliminar todo caracter especial puede resultar inconveniente para el sentido de lo que haya escrito el usuario..

2) me hiciste ver que estaba en un error. Nunca designe un maxchar a los inputs sino que limitaba el largo del registro en la base forzosamente a lo que necesitaba, algo sin sentido..

Probare dando un largo mayor al registro y limitando el input. Luego el caracter no valido, lo transforme con alguna funcion como la de arriba..

encontre un buen articulo sobre todo esto aqui: Limpiar y validad que quizas a alguno le sirva..

saludos y gracias!

(El articulo que nombre es en ingles..)

Última edición por mumraa; 25/03/2013 a las 15:50 Razón: Idioma del recurso

Etiquetas: html, input, largo, limpiar, maximo, mysql, sql
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 08:56.