Índice­Buscar­Registrarse­Conectarse
Publicar nuevo tema   Responder al temaCompartir | 
 

 Cómo evitar Inyecciones SQL en nuestro sitio [By WHK]

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
invisible_hack
CoAdmin
CoAdmin


Posts: 326
Puntos: 461
Reputación: 5
Fecha de inscripción: 02/09/2009

Staff


MensajeTema: Cómo evitar Inyecciones SQL en nuestro sitio [By WHK]   Mar Nov 03, 2009 8:11 pm

Para poder evitar una inyección SQL desde MySQL necesitas tener un par de cosas en claro, no es nada del otro mundo.
Para comenzar en una query donde ingresamos valores de tipo string siempre se deben ingresar encerradas en comillas simples y los valores numéricos con (int) de la siguiente forma:

Código:

<?php
if(!$_GET['id'])
 $_GET['id'] = '1'; // Da el valor por defecto
 
$resultado = mysql_query('
 SELECT *
 FROM noticias
 WHERE ID = \''.(int)$_GET['id'].'\'
', $handle);
.........
?>


Fijense que antepuse (int), de esta forma si la variable es numérica la dejará pasar, en caso contrario el valor cerá cero.

Código:

if($_GET['buscar']){
 mysql_query('
  SELECT *
  FROM datos
  WHERE palabra LIKE \'%'.mysql_real_escape_string($_GET['buscar'].'%\'
  LIMIT 0, 30
 ', $handle);
....
}


De todas formas hay que recordar que si queremos procesar una variable con magic quotes activado es recomendable filtrarlas con stripslashses como en este ejemplo:
http://www.webcomparte.com/foro/programacion-en-php/eliminar-magic-quotes-de-forma-rapida/

Código:

<?php
$_GET = stripslashses_gpc($_GET);
$_POST = stripslashses_gpc($_POST);
$_COOKIE = stripslashses_gpc($_COOKIE);
$_SERVER = stripslashses_gpc($_SERVER);
 
function stripslashses_gpc($buffer){
 if(!function_exists('get_magic_quotes_gpc'))
  return $buffer;
 if(get_magic_quotes_gpc()){
  if(is_array($buffer)){
  foreach($buffer as $variable => $valor){
    $temp[$variable] = stripslashses_gpc($valor);
  }
  return $temp;
  }else{
  return stripslashes($buffer);
  }
 }else{
  return $buffer;
 }
}
?>


Eso es todo, no necesitan filtros especiales que borren comillas (es inutil), IDS, expresiones regulares, etc etc etc, es tan simple como utilizar comillas simples para encerrar strings mas mysql_real_escape_string() y si es numérico utilizar (int), eso es todo y cuidarse de los errores que muchos cometen al no darle un limit a sus busquedas de datos dentro de la base de datos ya que si la query contiene %dato% como comodín cualquier atacante podría solicitar un "%" quedando en "%%%" forzando a MySQL que devuelva todos los datos que se encuentren en la base de datos y cuando no tiene limite puede causar que tu servidor colapse o que el script en php almacene demasiada información en sus variables y no pueda ser ejecutado correctamente devido al límite de memoria establecido por script en el archivo de configuraciones de php (php.ini).
Volver arriba Ir abajo
Ver perfil de usuario http://www.elrincondeinvisible.blogspot.com
gusthack
Usuario Nivel 1
Usuario Nivel 1


Posts: 1
Puntos: 2
Reputación: 0
Fecha de inscripción: 04/02/2010

Advertencias 0


MensajeTema: Re: Cómo evitar Inyecciones SQL en nuestro sitio [By WHK]   Jue Feb 04, 2010 2:59 am

esta buena la ayuda.....
Gracias
Volver arriba Ir abajo
Ver perfil de usuario
 

Cómo evitar Inyecciones SQL en nuestro sitio [By WHK]

Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.

Permiso de este foro:No puedes responder a temas en este foro.
 :: Seguridad General :: Seguridad Web-
Publicar nuevo tema   Responder al tema