Как запретить пользователям изменять значения файлов cookie - PullRequest
1 голос
/ 03 июня 2011

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

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

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

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

Может быть, я должен был пойти по маршруту БД?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 03 июня 2011

Стандартный ответ: «Нет данных из браузера, заслуживающих доверия».

Отсутствует.

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

Правильно. Это решение.

Что означает попадание в БД, побеждающее цель помещения значения в файл cookie.

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

Печенье, однако, все еще имеет некоторое значение.

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

1 голос
/ 19 сентября 2014

Следующие две цитаты из ОП противоречат друг другу:

Этот ItemId не является конфиденциальными данными

И

Проблемаесли пользователь может изменить этот ItemId файла cookie для ItemId другого пользователя, и тогда он потенциально сможет выполнять действия с чужим элементом.

Общая предпосылка вашего вопроса плохая.Я не могу сказать вам, как запретить пользователю изменять значения файлов cookie, потому что вы НИКОГДА не должны доверять тому, что отправлено клиентом.Всегда предполагайте, что клиент будет изменять значения файлов cookie ВСЕ ВРЕМЯ.Все остальное - просто очень плохой дизайн.

Единственные файлы cookie, которые вы должны использовать:

  • Пользовательский токен - Случайный, многосимвольный (скажем, 10-значная) буквенно-цифровая строка, которая относится к фактическому идентификатору пользователя в базе данных.

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

  • Просмотр предпочтительных файлов cookie - Маленькие файлы cookie, которые неНеважно, например, выбрать какую CSS-тему для обслуживания клиенту, или же представленные данные должны быть отсортированы по AZ или ZA и т. д. Материал, который не имеет значения, если он очищен и не имеет существенного значения для клиента или любого другогоuser.

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

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

Я решил использовать хеш MD5, чтобы убедиться, что пользователь не вмешивался в значения файлов cookie.

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

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

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