Я сделал php-скрипт, который действует как список дел. На стороне администратора (просто admin.php) есть таблица отображения, и эта таблица выбирает каждую запись из таблицы списка дел в mysql, а затем помещает кнопку удаления рядом с каждой записью.
Каждая кнопка удаления имеет тег привязки с идентификатором, основанным на конкретной связанной строке из mysql. Поэтому, когда кто-то нажимает кнопку удаления, URL-адрес переходит на /remove.php?id=ROWID.
Проблема в том, что кто-то может ввести этот URL-адрес с любой страницы с правильным идентификатором строки, он может удалить данные. На remove.php я использую метод $_GET, чтобы получить этот ROWID. Я мог бы создать форму и получить этот POST, который у меня есть для других функций на сайте. Но даже для них, если кто-то наберет add.php, они все равно смогут получить доступ к функциям добавления в php-скрипте.
Я попытался запустить сеанс с помощью session_start (); на странице admin.php (которая в конечном итоге будет заблокирована только для аутентифицированных пользователей с правами администратора), но если кто-то знает ссылку, он все равно сможет перейти на /remove.php?id=ROWID, даже не находясь в сеансе или не указав сеанс от администратора .php
Я что-то пропустил? Есть ли способ предотвратить доступ к remove.php для пользователей, прошедших проверку подлинности или находящихся в сеансе?
Вы пробовали использовать if?
remove.php необходимо проверить переменную сеанса, чтобы убедиться, что они вошли в систему.
@barmar, что-то вроде принято if (isset ($ _ SESSION ['errors'])) {// Что-то делать}
Больше похоже на if (!isset($_SESSION['admin'])') { die("You're not logged in as admin"); }
@barmar Я попробую это через секунду, но логика заключается в том, что им сначала нужно будет получить доступ к admin.php, и если это так, тогда они будут изолированы от сеанса и смогут получить доступ к remove.php?
Да в том-то и дело.
@Barmar Сработал как шарм. Есть ли способ установить тайм-аут или указать продолжительность сеанса?
@Barmar Знаете ли вы, как я могу привязать сообщение об ошибке, если я возвращаю пользователя на страницу, с которой он пришел? Например, они переходят к remove.php, а затем возвращаются на страницу, с которой они пришли, используя: header ("Location: {$ _SERVER ['HTTP_REFERER']}"); но как мне привязать к этому сообщение об ошибке?
Вы можете добавить параметр URL, например $_SERVER['HTTP_REFERER'] . '?error=message', и тогда страница сможет проверить наличие $_GET['error'] и где-нибудь отобразить сообщение.
@Barmar Еще раз спасибо за вашу помощь! Очень признателен






Благодаря вышеупомянутому сообщению,
Я использовал:
if (isset($_SESSION['ID'])){
code goes here for if they are authenticated
}else{
die("You're not logged in as admin");
}
Это запустит сеанс на page1.php, а на page2.php проверит, был ли сеанс запущен со страницы page1. В противном случае отобразится сообщение об ошибке (штамп).
Если вы хотите завершить сеанс пользователя в зависимости от продолжительности времени, используйте этот пример: http://thisinterestsme.com/expire-php-sessions/
Я думаю, вам следует подумать о if (!isset($_SESSION['ID'])) die("You're not logged in as admin"); , так как его легче читать, если у вас много кода.
@ sr9yar Я только что включил тайм-аут сеанса, поэтому теперь мой код включает в себя приведенное выше с дополнительным оператором if в «код идет сюда», а затем if (! isset) в самом конце кода, чтобы оценить, является ли переменная не установлен на page1.php.
HTTP GETследует использовать для чтения Только. Даже в этом случае вам все равно потребуется реализовать уровень входа и контроля доступа - или, по крайней мере, простойHTTP Basic Auth.