Как кто-то может повторно использовать куки? - PullRequest
0 голосов
/ 15 июня 2011

В моем приложении для входа в систему, если пользователь хочет запомнить свои данные для входа, я установил два следующих файла cookie:

setcookie( "userid", "my_name", time()+3600*24*30, "/", "mydomain.com" ); 
setcookie( "login_key", "d776a29aba831a7d71e964256c3e1817", time()+3600*24*30, "/", "mydomain.com" ); 

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

Теперь у меня вопрос: если кто-то получит доступ к этим файлам cookie, как он может использовать их на другом компьютере? Было бы так же просто, как настроить файл PHP и добавить в него строки выше?Или это возможно, но не легко?

PS.Ключ login_key не является паролем, но всегда один и тот же.

Ответы [ 5 ]

1 голос
/ 15 июня 2011

есть аддоны для браузеров, которые позволяют пользователям редактировать куки

https://addons.mozilla.org/en-us/firefox/addon/add-n-edit-cookies/

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

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

<?php

session_start();

if (isset($_SESSION['HTTP_USER_AGENT']))
{
    if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT']))
    {
        /* Prompt for password */
        exit;
    }
}
else
{
    $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}

?>

Подробнее здесь , а также вы можете сравнить IP-адрес также ... (но многие будут использовать опцию Запомнить меня и, как правило, homeпользователи будут иметь динамический IP)

0 голосов
/ 15 июня 2011

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

Я бы порекомендовал вам сначала прочитать некоторые статьи о защите HTTP-сессий.У PHP есть много примеров того, как правильно это сделать.(К сожалению, у него также есть много плохих примеров, поэтому будьте осторожны.)

0 голосов
/ 15 июня 2011

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

В моем случае (Chrome 12) файлы cookie хранятся в C:\Users\PJ\AppData\Local\Google\Chrome\User Data\Default.Открытие этого файла с помощью шестнадцатеричного редактора показывает мне, что это база данных SQLite, к которой можно легко получить доступ и изменить.

Действительно, весь смысл атак на межсайтовый скриптинг (XSS) заключается в том, чтобы получить сессионный cookie, хранитьэто в браузере злоумышленника и таким образом перехватывает сеанс жертвы.

0 голосов
/ 15 июня 2011

Возможно редактировать куки, на самом деле это не просто возможно, а просто.Вы всегда должны предполагать, что пользователи имеют эту возможность.

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

Вы также можете сохранить UUID только в файле cookie, а затем сохранить постоянную информацию (такую ​​как имя пользователя, время входа и т. Д.) В базе данных.

0 голосов
/ 15 июня 2011

Да, это обратная сторона куки. Ваш login_key Я полагаю, он говорит с вашей базой данных, верно? Если это так, сохраните в базе данных дополнительную информацию для этого ключа, такую ​​как IP-адрес и пользовательский агент, а затем сравните их, чтобы попытаться ограничить вход в систему с другого компьютера.

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