2016-08-11 3 views
2

Я создал логин на своем сайте, где я установил переменную $_SESSION['user'], если логин был успешным.SESSION login уязвим?

Теперь я защищаю все содержимое для зарегистрированных пользователей по

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

Это означает, что если не было успешным Логин, вы сразу вернуться на страницу входа в систему.

Теперь мой вопрос: безопасно ли это? Не может ли переменная $_SESSION['user'] установить другим веб-сайтом?

+1

сеансы записываются в файл на веб-сервере, поэтому другой сайт может установить сеанс под названием 'user', но он будет установлен на другом сайте и действителен на другом сайте. – RamRaider

ответ

1

No.

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

Если какой-либо другой сайт устанавливает тот же ключ в переменную $_SESSION, это будет только его хэш, который ваш сервер не будет читать.

3

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

2

Вы вряд ли столкнетесь с этой проблемой, если на том же сервере не будет другой страницы входа. Скажем, логин администратора и конечных пользователей.

Если вы хотите укрепить свою сессию и другие компоненты безопасности, Вы можете обратиться к этому:

PHP Session Security

3

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

Поскольку PHP хранит идентификатор сеанса в качестве файла cookie, хакер может украсть сеанс просто с помощью XSS.

Может быть, посмотрите здесь для получения дополнительной информации: Is this a safe use of Session Variables?

4

Это правильно. Это обычно используется большинством веб-сайтов с использованием PHP.

$_SESSION - это супер глобальная переменная, управляемая только вашим сервером.

Что происходит:

  1. Вы называете session_start()
  2. Куки имени PHPSESSID (или что-нибудь, что вы называете его в php.ini) с использованием криптографически безопасного значения будет сгенерирован.
  3. PHP объявляет переменную с именем $_SESSION, которая внутренне хранится с ассоциацией с генерируемым значением cookie.

Почему он не может быть изменен другими веб-сайтами:

  1. Значение $_SESSION сохраняется только внутри. Даже клиент не знает его ценности. Он содержит только cookie для идентификатора сеанса, но он даже не знает, что означает идентификатор сеанса, а также идентификатор сеанса других людей.
  2. Этот файл cookie ID сессии не может быть украден или изменен другими веб-сайтами. По умолчанию путь к файлу cookie установлен в ваш собственный домен, и клиент должен отправить его только вам. (Если клиент хочет отправить на другие веб-сайты, он не выполняет свои собственные учетные данные, и это не ваша ответственность, кроме ошибки браузера клиента)

Если вы не используете другие сайты на одном сервере, Это не проблема (при нормальных обстоятельствах).


В качестве примечания, напоминаем, что вы должны добавить return; заявление после того, как с помощью header("Location: index.php");. Это общий источник ошибок, и в этом контексте он может подвергнуть опасности ваш сервер, потому что, несмотря на то, что ваш браузер не отображает контент после получения заголовка «Местоположение», ваш сервер на самом деле по-прежнему отправляет данные, которые должны быть сгенерированный для пользователя, как если бы он вошел в систему.

TL; DR: если у вас есть сценарий, который не должен отправлять какие-либо данные, если клиент не вошел в систему, не добавляя оператор return; после того, как header("Location: ..."); сделает сервер по-прежнему отправленным данные, но обычные браузеры не будут отображать его (потому что он перенаправляет), но если есть кто-то, кто пытается просмотреть отправленные данные (используя такие простые методы, как curl без добавления опции -L), их легко увидеть.

+0

Можно ли установить cookie на другом веб-сайте? – NaveenDA

+0

@NaveenDA Теоретически нет, если вы не хотите, чтобы это произошло. Фактически, если вы правильно отправляете файлы cookie (действие по умолчанию), их даже не отправляют на другие веб-сайты. – SOFe

+1

Представьте себе, что если каждый веб-сайт просматривается на каждом посещаемом вами веб-сайте, предположите, что вы посетили 1000 веб-сайтов, которые используют файлы cookie, каждый раз, когда какой-либо веб-сайт, который вы посещаете, отправляет 1000 файлов cookie без необходимости, что очень необоснованно. Если у браузера нет ошибок, файлы cookie с разных сайтов не должны перехватывать все. – SOFe