Как предотвратить возможность изменения URL-адреса и просмотра папок других пользователей

У меня есть каталог папок, и я хочу, чтобы пользователь с именем «x», чьи файлы были доступны, например: reports / x / 2015/04 /, не менял x на y и не видел все эти сообщения в y. У меня сеансы работают так, что вам нужно войти в систему, чтобы увидеть любые папки, но если вы вошли как x, вы можете увидеть папку y, изменив URL. вот мой index.php.

<?php

session_start();

if(!isset($_SESSION['username'])){
header("Location:../../../../login/login.php");
}

require_once('../../../config.php');
require_once('../../../boilerplate.php');

global $smarty;

$smarty->display('general-report.tpl');

1

Решение

Есть некоторые вещи, которые по своей природе плохи в этом, но для простоты быстрое исправление будет проверять, совпадает ли имя пользователя с именем папки.

Итак, глядя на ваш код, вы можете сделать что-то вроде этого.

if ($username == $dir_name) {
$smarty->display('general-report.tpl');
} else {
$smarty->display('error.tpl');
}

Теперь о том, почему вы не должны делать это таким образом …

Зарегистрированное имя пользователя на самом деле не должно быть видно в URL.

Вы не хотите, чтобы люди начали делиться своими именами по URL-адресам, а затем злонамеренные люди начинают грубо пробираться в вашу систему входа в систему, поскольку они знают разные имена пользователей.

Если бы это был я, все URL-адреса отчетов были бы одинаковыми, а имя пользователя, вошедшего в систему, определяло, какие отчеты пользователя показывать.

Таким образом, вы знаете, что он виден только этому человеку, и даже если он где-то поделится URL-адресом, его имя пользователя не будет отображаться.

0

Другие решения

Вы можете хранить в $_SESSION значение, которое представляет дом пользователя. Если пользователь находится за пределами своего домашнего каталога, он будет перенаправлен в свой дом. Значение `$ _SESSION [‘home’] может быть значением, хранящимся в базе данных, или само имя пользователя.

Вы можете сделать что-то вроде этого:

preg_match('/reports\/([a-zA-Z0-9]*)\//',$_SERVER['REQUEST_URI'],$matches);
if($_SESSION['home'] != $matches[0]){
header('location: reports/' . $_SESSION['home']);
}

Не стесняйтесь настраивать регулярное выражение.

0

спасибо всем, у меня получилось с этим поработать

<?php
/*===== Start sesstion and include config and boilerplate=====*/
session_start();
require_once('../../../config.php');
require_once('../../../boilerplate.php');

global $smarty;

/*=====Prevents seeing any pages unless logged in =====*/
if(!isset($_SESSION['username'])){
header("Location:../../../../login/login.php");
exit;
}
/*=====Allows only logged in users to see their profiles in path_report=====*/
preg_match('/maintenance_new\/([a-zA-Z0-9]*)\//',$_SERVER['REQUEST_URI'],$matches);
$path_report = explode("/", $_SESSION['path_report']);
if($path_report[0] != $matches[1]){
header('Location: /maintenance_new/' . $_SESSION['path_report'] );
exit;
}
/*=====Renders out page=====*/
$smarty->display('general-report.tpl');
0
По вопросам рекламы [email protected]