Доброе утро,
Я создаю сайт для клиента, и я столкнулся с огромной проблемой. Я разрешаю открытый поиск, где пользователь может выбрать поле поиска из выпадающего списка, а затем ввести значение поиска в поле ввода. SQL-запрос выполняется и отправляет результаты повторителей. Незарегистрированный пользователь может затем выбрать просмотр информации об этом конкретном пользователе, нажав на просмотр. Теперь, очевидно, нажав на вид (ссылку), они перенаправляются на другую страницу с помощью php.
> <td><a href='http://localhost/mygiftsite/pub_list_view.php?user=<?php echo $user_id;?>'>View</a></td>
Это производит следующий URL: http://localhost/mygiftsite/pub_list_view.php?user=1
, Затем на этой странице отображаются все списки, которые публикуются этим конкретным зарегистрированным участником. Незарегистрированный пользователь может затем просмотреть эти списки, нажав на любое из полей, и он перенаправляет на http://localhost/mygiftsite/pub_item_view.php?list=9
,
Моя проблема в том, что пользователь может просто изменить значение переменной / индекса списка в URL, чтобы просмотреть списки для других пользователей и списки с настройкой конфиденциальности private, которая не должна быть разрешена. Просто чтобы уточнить, в списке есть поле конфиденциальности, а не пользователь. Зарегистрированный пользователь решает либо сохранить список закрытым, либо сделать список общедоступным. Публичные списки должны быть доступны через поиск членов, а закрытый список не должен отображаться. Я запретил пользователям доступ к страницам без входа в систему с помощью следующего кода:
<?php
session_start();
if(!isset($_SESSION['userid'])){
header("location: http://localhost/mygiftsite/login.php");
}
?>
Но я хочу разрешить незарегистрированным пользователям искать и просматривать публичные списки. Пожалуйста, вы можете помочь мне решить эту проблему.
Моя главная проблема заключается в том, что параметр можно просто изменить в адресной строке. Как я могу предотвратить это?
Вы должны проверить каждую личную страницу, что пользователь, загружающий ее, является зарегистрированным пользователем.
Пример:
//keep logged user. Store in session during sign-in
$loggedUserId = $_SESSION['loggedUserId'];
//from URL GET parameter
$otherUserId = $_GET['userid'];
$listId = $_GET['list'];
if($loggedUserId==$otherUserId)
//do something, allow access
else {
//retrieve the list record based on $listId, get $isPrivate field
//do something else, don't allow access
if($isPrivate == true )
header("location: http://localhost/mygiftsite/login.php");
}
Других решений пока нет …