Posible inyección a partir de la cadena de date Seleccionar consulta

Tengo un problema que es un poco extraño. Mi página contiene un enlace html que refresca la página y llama a una variable de PHP. Esta variable agrega una cadena de date a la cadena url que se alimenta a una consulta MySQL, que toma loggings que coinciden con esta date. ¡Creo que esto está causando una inyección, ya que a veces borra al usuario de la database!

Sé que puede haber problemas de security con el '#' en el hyperlink, pero me gustaría saber qué está pasando. También esto tendría diferentes efectos en diferentes browseres ya que usa javascript. Los usuarios que se eliminan parecen suceder solo en las computadoras de algunas personas.

El código PHP calcula una timestamp dentro de tres días y luego la coloca en un formatting SQL:

$ts_threeDays = mktime(1,0,0,date('m'), date('d')+3-date('w'), date('y')); $threeDaysAhead = date('ym-d', $ts_second_day); 

La secuencia de commands luego escucha la variable 'día' en la cadena url pasada por el hyperlink en la página:

 $date = mysql_real_escape_string($_GET['day']); 

El JavaScript y el hyperlink es:

 <a href='#' onClick="document.location.href='planner.php?day=<?php echo $threeDaysAhead; ?>'"> 3 Days Later</a> 

La consulta de MySQL es más grande, pero la única input que toma de la acción del usuario es la cadena de date anterior. La consulta básicamente se ve así (usa otra statement de selección para acceder a la tabla de usuarios):

 SELECT planner.details FROM planner WHERE planner.date = '$date' AND users.`user_id` = '$id' // Logged in Id superglobal 

Si alguien puede ayudarme y explicarme mi problema, estaré muy agradecido. Muchas gracias

Como está pasando $date través de mysql_real_escape_string , la sospecha debe recaer en $id , o algo que no podemos ver.

Una instrucción SELECT no va a eliminar cosas de su db. ¿Qué más tiene en su file PHP que es responsable de eliminar usuarios, y podría tener alguna lógica quebrada de if / else que termina pasando por una function para eliminar usuarios cuando realmente no deberían?

Las respuestas anteriores explican muy bien tu problema.

Y puede validar su 'día' get var de esta manera:

 $day = ''; if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $_GET['day']) { $day = $_GET['day']; } else { die("bye bye"); }