Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/12/2010, 00:18
Avatar de Gambinoh
Gambinoh
 
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Página dinámica que varía según peticiones

Cita:
Iniciado por areslepra Ver Mensaje
Código PHP:
$categoria mysql_real_escape_string($_GET['categoria']); 
Así nos evitamos las famosas inyecciones sql. Recordar la ley fundamental para evitar los hackeos, nunca confiar en las entradas, siempre hay que validar TODO lo que se pueda.
Vaya, gracias, he leído cosas sobre eso de las inyecciones sql.

Te agradezco que me des ese consejo porque yo no sabía que se pudiera mejorar la seguridad usando $_GET, cuando leí el tutorial de foros del web decían que get era peligroso porque no cifraba los datos que se enviaban, por lo tanto era más seguro el método post.

¿Sabes que hace la función mysql_real_escape_string ()?


[Edito]


Bueno he encontrado esto sobre la función que nombras:


"string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )

Escapa caracteres especiales en la cadena no escapada, teniendo en cuenta el conjunto de caracteres actual de la conexión para que sea seguro usarla en mysql_query(). Si se van a insertar datos binarios, esta función debe ser usada.

mysql_real_escape_string() llama la función de la libreria de MySQL mysql_real_escape_string, la cual antepone backslashes a los siguientes caracteres: \x00, \n, \r, \, ', " y \x1a.

Esta función siempre debe (con pocas excepciones) ser usada para hacer los datos seguros, antes de enviar una consulta a MySQL. "


Aquí ponen un ejemplo de su uso, de lo cual deduzco que en la propia conexión y en cada query también hay que usarlo.

Example #1 Ejemplo simple de mysql_real_escape_string()

<?php
// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());

// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
?>

Example #2 Un ejemplo de ataque SQL Injection

<?php
// Query database to check if there are any matching users
$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";
mysql_query($query);

// We didn't check $_POST['password'], it could be anything the user wanted! For example:
$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";

// This means the query sent to MySQL would be:
echo $query;
?>

¿En mis query habría que usarlo cómo se podría hacer?

De todas maneras leeré más porque me falta mucho


* Note:

Si magic_quotes_gpc está habilitado, primero aplique stripslashes(). Si se usa esta función en datos que ya han sido escapados, se escaparian dos veces los datos.

Última edición por Gambinoh; 23/12/2010 a las 00:32