У меня проблема, которая немного странная. Моя страница содержит ссылку html, которая обновляет страницу и вызывает переменную PHP. Эта переменная добавляет строку даты в строку url, которая подается в запрос MySQL, который захватывает записи, соответствующие этой дате. Я думаю, что это вызывает инъекцию, поскольку она иногда удаляет пользователя из базы данных!
Я знаю, что могут возникнуть проблемы с безопасностью, используя «#» в гиперссылке, но я хотел бы знать, что происходит. Также это будет иметь разные эффекты для разных браузеров, видя, как он использует javascript. Удаленные пользователи, похоже, происходят только на компьютерах некоторых людей.
PHP-код вычисляет метку времени через три дня и затем помещает ее в формат SQL:
$ts_threeDays = mktime(1,0,0,date('m'), date('d')+3-date('w'), date('y')); $threeDaysAhead = date('ym-d', $ts_second_day);
Затем скрипт прослушивает «дневную» переменную в строке url, передаваемой гиперссылкой на странице:
$date = mysql_real_escape_string($_GET['day']);
JavaScript и гиперссылка:
<a href='#' onClick="document.location.href='planner.php?day=<?php echo $threeDaysAhead; ?>'"> 3 Days Later</a>
Запрос MySQL больше, но единственным входом, который он принимает от действия пользователя, является указанная выше строка даты. Запрос в основном выглядит так (использует другой оператор select для доступа к таблице пользователей):
SELECT planner.details FROM planner WHERE planner.date = '$date' AND users.`user_id` = '$id' // Logged in Id superglobal
Если кто-нибудь сможет мне помочь и объяснить мою проблему, я буду очень благодарен. Большое спасибо
Когда вы передаете $date
через mysql_real_escape_string
, подозрение должно падать либо на $id
, либо на то, что мы не можем видеть.
SELECT
не собирается удалять данные из вашего db. Что еще у вас есть в вашем PHP-файле, который отвечает за удаление пользователей, и может быть, у вас есть некоторая сломанная логика if
/ else
которая заканчивается передачей функции для удаления пользователей, когда они действительно не должны быть?
Предыдущие ответы очень хорошо объясняют вашу проблему.
И вы можете подтвердить свой «день» get var следующим образом:
$day = ''; if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $_GET['day']) { $day = $_GET['day']; } else { die("bye bye"); }