Asp MVC 2: запутать идентификаторы сущностей - PullRequest
0 голосов
/ 20 декабря 2010

Тип проекта: Asp MVC 2 / NHibernate / C #

Проблема

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

Так как возможно изменить форму-сообщение, злой пользователь может попытаться отправить обратно другой идентификатор, который, возможно, предоставит ему больше прав (если, т. Е. Этот идентификатор относится к объекту безопасности).

Мойподход

  1. Создайте GUID и свяжите его с идентификатором
  2. Сохранение ассоциации в сеансе http
  3. Дождитесь ответа и извлеките действительный идентификатор из полученного GUID.

Вопрос:

Какие методы вы используете, чтобы запутать сущность-ID

Ответы [ 2 ]

2 голосов
/ 20 декабря 2010

Если вы так много делаете для GUID, почему бы просто не использовать GUID для идентификации самого объекта, который фактически хранится в базе данных (хотя я бы посоветовал против этого )?

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

Вы можете даже забыть попытаться сделать это вообще, поскольку много сайтов "затронуты" этой проблемой, и это, очевидно, не проблема (например, StackOverflow).Затраты слишком велики.

Кроме того, если вы беспокоитесь о безопасности, почему бы вам не установить какие-то гранулярные разрешения, установленные на уровне отдельного действия / даже объекта.Это также решит некоторые проблемы.

РЕДАКТИРОВАТЬ:

Другая проблема с вашим решением - несовместимые уникальные идентификаторы.Если пользователь говорит: «ID as23423he423fsda содержит« недопустимые »данные», как вы узнаете, к какому идентификатору он принадлежит, если он меняется при каждом запросе (если вы также собираетесь изменить идентификатор в URL)?Вы были бы на намного лучше с алгоритмом шифрования, который всегда хеширует одно и то же значение, поэтому вы можете легко выполнить поиск (если вам это нужно), а также у пользователя есть согласованные идентификаторы.

1 голос
/ 20 декабря 2010

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

...