2010-06-21 4 views
5

Я создаю систему входа в систему на PHP, и я хочу знать, как наилучшим образом защитить строку информации пользователя в моем cookie. Я думал о шифровании строки ключом как-то? Это лучший способ? Я новичок в этом.Какой лучший способ защитить данные cookie входа в PHP?

Заранее спасибо.

+6

Что вы хотите защитить от этого? –

+0

Люди, которые могут попытаться легко прочитать cookie для информации о пользователе ... – mattsven

+1

Итак, вы хотите защитить конфиденциальность ваших данных (ее нельзя прочитать третьим лицам), а не целостность ваших данных (изменения данных будут быть обнаружен), правильно? – Gumbo

ответ

23

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

+2

И отметьте безопасный флаг cookie при использовании HTTPS, а HTTPOnly - true. – Tower

0

Если вы абсолютно ДОЛЖЕН хранить информацию в cookie вместо сеанса пользователя, подумайте о подписании ее с HMAC. Функция hash_hmac является встроенной в современные версии PHP.

Если вы храните логин пользователя для функции «помнить меня», храните идентификатор пользователя и хэш информации, доступной только в вашей базе данных. Например, хеширование имени входа и пароля и сохранение его с идентификатором пользователя в файле cookie достаточно безопасно. Если пользователь когда-либо изменяет свой пароль, все машины, с которыми он вошел в систему с этим методом, были бы признаны недействительными, и нет никакого способа просто изменить идентификатор в файле cookie и все равно войти в систему, поскольку хэш-адрес имени пользователя/пароля не будет соответствовать ,

+1

Как расшифровать вывод? Или это односторонний? – DrColossos

+0

HMAC - хеш-функция, расшифровка отсутствует, поскольку шифрование отсутствует. Это механизм обнаружения несанкционированного доступа. Кроме того, мне любопытно, почему я был заблокирован. – Charles

+0

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

2

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

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

Вы должны хранить только такие данные, как имя пользователя для запоминания или идентификатор сеанса.

+1

И печенье можно вводить и проверять по проводу. – strager

4

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

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

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

+0

+1 для дополнительной информации –

0

Вы получаете сеансы бесплатно! Это хранимая на сервере информация, автоматически обрабатываемая PHP/framework-of-your-choice. Вы просто помещаете данные в сеанс, который связан со случайным UID, хранящимся в сеансах клиентов. На стороне клиентов это сеансовый файл cookie. Этот идентификатор автоматически генерируется, вы можете отличить зернистость от поведения manually.

Данные, хранящиеся на стороне клиента, никогда не являются безопасными, нет реального шифрования. Сессии, которые вам понадобятся для отслеживания зарегистрированных пользователей. Если у вас много данных, вы можете использовать идентификатор для идентификации связанных данных из других хранилищ данных (DB, XML и т. Д.)

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