Foros del Web » Programando para Internet » PHP »

Seguridad consultas e inserción

Estas en el tema de Seguridad consultas e inserción en el foro de PHP en Foros del Web. Buenas a todos. Tengo unos scripts para inserción de datos y consultas a una base de datos. Lo tengo hecho de forma muy básica, y ...
  #1 (permalink)  
Antiguo 14/11/2008, 15:32
 
Fecha de Ingreso: agosto-2008
Mensajes: 166
Antigüedad: 15 años, 8 meses
Puntos: 1
Seguridad consultas e inserción

Buenas a todos.

Tengo unos scripts para inserción de datos y consultas a una base de datos. Lo tengo hecho de forma muy básica, y me preocupa el tema de la seguridad. Lo hice siguiendo un conocido tutorial donde no se añadía más sobre el tema. Ahora mismo por ejemplo para insertar a la base de datos desde un formulario el código es básicamente así:

$variableformulario=addslashes($_POST['formulario']);
$insertar = "INSERT INTO dbase (campo) VALUES ('".$variableformulario."')";
$result = mysql_query($insertar) or die( mysql_error() );

Y para las consultas es así.

$querydb = mysql_query("select * from dbase where campo like '".$busqueda."'") or die("Error en query:".mysql_error() );

if(mysql_num_rows($querydb) > 0){
$row = mysql_fetch_array($querydb);
echo stripslashes($row['campo'])."<br>";

He visto que en algunas dudas de otros usuarios, se les recomienda el uso de la función mysql_real_escape_string(), y luego por otro lado, en otro post de otro compañero del foro, recomendaban la siguiente función:

function escape($values) {
if(is_array($values)) {
$values = array_map(array(&$this, 'escape'), $values);
} else {
/* Quote if not integer */
if ( !is_numeric($values) || $values{0} == '0' ) {
$values = "'" .mysql_real_escape_string($values) . "'";
}
}
return $values;
}


Tenía entendido que con lo de addslashes y stripslashes era suficiente pero me da que no.... ¿Cuál es la mejor opción? (Como veis son consultas e inserciones de datos muy simples)

Gracias y un saludo.
  #2 (permalink)  
Antiguo 14/11/2008, 18:21
 
Fecha de Ingreso: junio-2008
Mensajes: 76
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Seguridad consultas e inserción

No hay una mejor opcion en seguridad... todos tienen sus pros y contras.

Yo lo que hago, es filtrar caracteres no deseados mediante expresiones regulares. Por ejemplo, en una variable llamada $nombre no quiero que aparezcan simbolos como : @<;~>#+&º entre muchos otros.

De antemano debes saber si la variable puede estar vacia, que sean solo letras, solo numeros... que tengan un minimo o maximo de caracteres, etc. Tienes que invertir mucho tiempo leyendo, experimentando y mejorando tu programacion.

JAMAS CONFIES EN EL USUARIO. Primero filtra la informacion del usuario, cuando creas que tus filtros son lo suficientemente buenos, entonces envia la informacion a la base de datos.
  #3 (permalink)  
Antiguo 14/11/2008, 18:31
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Seguridad consultas e inserción

Tenés varios aspectos a cuidar:

1- Injection: Con mysql_real_escape_string estás más que bien ;) (la función escape usa eso teniendo en cuenta arrays y números). Tené en cuenta lo que dice ZICCO, no lo pases por alto. Por ejemplo, si haces un "... where id = '{$var}'...", a $var la podes forzar a un int pasandola por intval().

2- Xss: Si tenes datos que no serán moderados aplica este filto: http://snipplr.com/view/1848/php--sacar-xss/

3- Spam: Usá un captcha, yo tengo uno propio, pero en las FAQ o en google encontrás varios.

4- Léxico: Usá algún filtro de malas palabras, no tenés más que hacer un str_replace( array('malapalabra1','malapalabra2'),'',$str); o lo que es mejor un eregi por ejemplo y si da true ponerlo en estado de "moderar", para que no se borren palabras como computación.

Hay varios puntos más, pero me parece que éstos son los más usados.

Repito lo de ZICCO, JAMAS CONFIES EN EL USUARIO.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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:40.