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/*