Инъекции в куки

89
22 января 2021, 03:40

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

Мне удалось сделать так, что я получаю от сайтов страницы, которые видят авторизированные пользователи, но когда я рендерю эту страницу в браузер или просто отправляю в браузер информацию, полученную из заголовков после авторизации через cURL, и еще раз вызываю страницу с нужного сайта, то в браузере меня отправляет на страницу логина. Собственно вопрос: можно ли как-то передать в браузер куки, полученные через cURL при авторизации, так, чтобы потом запрос на нужный ресурс не приводил к инициировании новой сессии? Сейчас делаю вот так:

foreach ($cookies as $name => $value) {
    setcookie ($name, $value, 0, '/', 'site.domen.com');
}

Но в браузере я не вижу отправки нужных кук на сайт. Подскажите, кто хорошо знаком с этим вопросом, что я делаю не правильно? Или такое запрещено настройками безопастности? На бек-энде использую РНР, но если есть рабочие примеры на других языках, то думаю, что разберусь)))

Answer 1

Куки это просто заголовок запроса, который создатели http-клиентов (браузеров, например) договорились оправлять на сервер в определённых случаях. Один из способов (популярный, но не единственный) аутентификации пользователя на сайте заключается в генерации специального уникального секретного токена и передача его в заголовке Set-Cookie. Браузер, получив такой заголовок, сохранит токен и будет добавлять его к каждому следующему запросу. Так как токен уникальный, то сервер сможет аутентифицировать по нему пользователя.

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

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

READ ALSO
Получить файл через 'php://input'

Получить файл через 'php://input'

Отправляю файлы (избражение, изображние в архиве) на сервер POST-запросомФайл приходит(данные появляются в $_FILES)

109
Правильная загрузка больших файлов, PHP

Правильная загрузка больших файлов, PHP

Всем приветЗадался вопросом, как правильно отдавать пользователю на загрузку большой файл? Использую Laravel, при стандартном подходе response()->download()...

83
Использование нескольких @OneToOne аннотаций Hibernate

Использование нескольких @OneToOne аннотаций Hibernate

У меня есть 3 сущности: Customer, User и VerificationEmail

86