Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/05/2008, 19:43
Avatar de farra
farra
 
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 17 años
Puntos: 20
De acuerdo Re: mi web tiene sql injetion , como lo arreglo?

Usar solo stripslashes() y strip_tags() no es nada seguro....

strip_tags() :
Debe tenerse en cuenta que la funció no modifica los atributos de las etiquetas que se permiten mediante el parámetro etiquetas_permitidas , por lo que un usuario con malas intenciones podrí incluir atributos como style y onmouseover cuando envía información a sitios como un foro de discusión.

stripslashes() :
Lo unico que hace es: Devuelve una cadena con las barras invertidas eliminadas (\' se convierte en ', etc.). Las barras invertidas dobles (\\) se convierten en sencillas (\).
te va a proteger contra inyeccionnes de este tipo ( pagina.php?id=-1' or 1=1 -- ) pero no contra una inyeccion mejor elaborada como esta: ( pagina.php?id==-1/**/UNION/**/ALL/**/SELECT/**/1,2,concat(user,0x3a,pass),null,5,6/**/FROM/**/usuarios/* ) que si te fijas no usa comillas...


MEJOR Usa esta funcion para todas las variables: $_GET $_POST $_SESSION $_COOKIE etc... todas las variables externas.. y listo!


Código PHP:

if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}


por ejemplo:

en ves de hacer tu consulta asi:
Código PHP:
// consulta vulnerable a inyeccion sql
$uidpers=$_GET['uid'];
mysql_select_db($database_conexion$conexion);
$query_uidpers "select * from usuarios WHERE Idusuario='".$uidpers."'  ";
$uidpers mysql_query($query_uidpers$conexion) or die(mysql_error());
$row_uidpers mysql_fetch_assoc($uidpers);
$totalRows_uidpers mysql_num_rows($uidpers); 

hacela asi:
Código PHP:
// consulta NO vulnerable a inyeccion sql
$uidpers=GetSQLValueString($_GET['uid'], "int");
mysql_select_db($database_conexion$conexion);
$query_uidpers "select * from usuarios WHERE Idusuario='".$uidpers."'  ";
$uidpers mysql_query($query_uidpers$conexion) or die(mysql_error());
$row_uidpers mysql_fetch_assoc($uidpers);
$totalRows_uidpers mysql_num_rows($uidpers); 
como te harian la inyeccion sql?

asi:
Código HTML:
www.tupagina.com/pagina.php?uid=-1/**/UNION/**/ALL/**/SELECT/**/1,2,concat(user,0x3a,pass),null,5,6/**/FROM/**/usuarios/*

Última edición por farra; 04/05/2008 a las 19:57