Защита идентификаторов по URL в ASP.NET MVC - PullRequest
4 голосов
/ 12 ноября 2009

Я работаю над типичным приложением CRUD в ASP.NET MVC, где будет несколько учетных записей пользователей, и у каждого будет несколько элементов.

Когда пользователь редактирует элемент, он будет делать это по URL-адресу, например / edit / 5 , где число представляет идентификатор строки в базе данных.

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

  1. Зашифруйте его, чтобы его нельзя было легко изменить, но, конечно, мне нужен код для его расшифровки каждый раз, когда он отправляет обратно.
  2. Измените схему базы данных так, чтобы GUID также создавался рядом с идентификатором, и это используется в URL.
  3. Оставьте читаемый идентификатор как есть и включите идентификатор пользователя вошедшего в систему в запросах для элемента, чтобы запросы выглядели так:

    database.Items.SingleOrDefault (c => c.UserID == [текущий зарегистрированный идентификатор пользователя] && c.ID == itemID);

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

Ответы [ 3 ]

9 голосов
/ 12 ноября 2009

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

5 голосов
/ 12 ноября 2009

Никогда не доверяйте пользовательскому вводу, всегда проверяйте, есть ли у него доступ к нему.

0 голосов
/ 12 ноября 2009

Сохранение идентификатора пользователя в коллекции сеансов.

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