Intereting Posts
непрерывный цикл через массив PHP (или объектные ключи) Несколько флажков, имеющих одно и то же имя Как проверить, какие расширения PHP были включены / отключены в Ubuntu Linux 12.04 LTS? PHP7, установленный Homebrew, не работает с Apache на macOS Возобновляемая загрузка с использованием API клиентов Google. Недопустимый URL загрузки PHP rand vs mt_rand vs openssl_random_pseudo_bytes Применение функции для каждого значения массива MySQL SELECT Tree Parent IDs Как удалить адреса электронной почты и ссылки из строки в PHP? Как обрабатывать новые строки в Javascript? (из PHP) Как использовать активную загрузку здесь, я имею в виду только одну переменную вместо двух. Поэтому мне не нужно запускать два отдельных запроса JSON недействителен (JSONview), но я не вижу, как Как конвертировать дату из одного формата в другой PHP PDOException: "SQLSTATE : недопустимый номер параметра" Переадресация Symfony2 для прослушивателя событий?

Возможная инъекция из строки даты Выберите запрос

У меня проблема, которая немного странная. Моя страница содержит ссылку 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"); }