PHP предотвращает фальсификацию URL - PullRequest
0 голосов
/ 27 марта 2012

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

session_start();
$userEmail = $_SESSION["email"];
$user = $_GET["user"];

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

if($user !== $_SESSION["email"]){
header("Location:notes.php?user=$userEmail");
}

Последний бит кода вызывает ошибку перенаправления.

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Вы пытаетесь предотвратить подделку URL на этой странице, или notes.php?

Не видя notes.php или каких-либо других страниц, трудно сказать. Но чтобы предотвратить фальсификацию URL, всегда полезно проверить $_SERVER['HTTP_REFERER'] на чувствительных страницах, выполнив что-то вроде:

if ($_SERVER['HTTP_REFERER'] !== "previous_page.php") {
 header("Location: error_page.php");
 session_destroy();
 exit;
}

Но это не полное доказательство, потому что если злоумышленник находится на previous_page.php, он может просто перейти на страницу, которую мы пытаемся защитить, поэтому необходима дополнительная защита.

Вы можете (и должны) внедрить систему токенов. Это делается так:

$_SESSION['token'] = md5(uniqid(rand(), TRUE));

Это создаст красивую длинную строку, уникальную для человека, просматривающего эту страницу. Смысл этого состоит в том, чтобы передать эту переменную сеанса на следующую страницу как переменную $_GET, а затем сравнить их, чтобы убедиться, что они равны друг другу. Это делается так:

$token = $_SESSION['token'];
header("Location:notes.php?user=$userEmail&token=$token");

//...then, on notes.php:
if ($_GET['token'] !== $_SESSION['token']) {
 header("Location: error_page.php");
 session_destroy();
 exit;
}

Однако, очень умный человек мог обойти это. Я бы посоветовал провести дополнительные исследования «Подделки CSRF». Надеюсь, это направит вас в правильном направлении.

0 голосов
/ 27 марта 2012

Похоже, что "фальсификация URL", которую вы пытаетесь избежать, заключается в том, чтобы разрешить только зарегистрированным пользователям доступ к странице?Если это так, дайте им либо подписанный файл cookie, либо идентификатор сеанса, который вы храните в файле cookie.

Если это не то, что вы имеете в виду, пожалуйста, перефразируйте вопрос - что вы пытаетесь остановить людейделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...