2011-12-29 2 views
7

page1.php:Может ли пользователь изменить сеанс PHP?

<?php 
session_start(); 
if ($_POST['password'] == "testpass") 
$_SESSION['authenticated'] = true; 
?>

page2.php

<?php 
session_start(); 
if (isset($_SESSION['authenticated']) && $_SESSION['authenticated'] == true) { 
echo "Super secret stuff!"; 
} 
?>

Может ли пользователь получить в без супер безопасный пароль?

+1

Пользователь не может изменять PHP сессий на сервере. Они могут только подделывать законный файл cookie и маскарад как зарегистрированный пользователь, но это потребует от них кражи действительного файла cookie в первую очередь. – AbdullahC

+1

Не нужно проверять вашу переменную против истины в вашем тестовом примере, но при сравнении логических данных вам лучше использовать то же сравнение. $ test === true. Стремитесь быть строгим, когда это возможно. – MetalFrog

+0

@MetalFrog Я знаю, но если это не была проверка подлинности (просто оценка в этом случае), я бы использовал ==, поскольку я также могу предоставить «true» или 1 или «1» – BronzeByte

ответ

13

порядка № Данных в Переменная $ _SESSION хранится на сервере, недоступном пользователю.

Сессия связана с пользователем через файл cookie. Куки-файл с идентификатором (т. Е. Длинная случайная строка) отправляется пользователю для идентификации пользователя и ссылки на его сеанс. Если кто-то еще получит доступ к этому куки-файлу, он может использовать тот же код, чтобы притворяться, что он пользователь, и таким образом он может войти без пароля.

+2

Спасибо, что подтвердили, что предоставив больше информации :) – BronzeByte

+0

вопрос был: «Может ли пользователь войти без супер безопасного пароля?» И ответ «ДА». –

+1

@PoelincaDorin - Я думаю, что кто-нибудь с немного соли в голове может понять, в чем проблема, и какой правильный ответ. Твой нет. Этот. –

1

Сеанс может быть изменен только из кода PHP, это отличие $_POST, $_GET, $_COOKIE и т.д.

Как в стороне, я думаю, что вы можете использовать empty() для упрощения вашего условно:

<?php 
session_start(); 
if (!empty($_SESSION['authenticated']) { 
    echo "Super secret stuff!"; 
} 
?> 
+0

Это был просто тест;) – BronzeByte

1

сессия может быть изменена в различных случаях .. Смотрите это ->Session Poisoning

+0

+50! удивился, не голосовал .. любая обновленная информация? Можете ли вы зарегистрировать ответ QA? – wpcoder

Смежные вопросы