2010-09-02 2 views
1

Я знаю, что маршруты по умолчанию в MVC включают параметр id, который часто сопоставляется с идентификатором объекта, поскольку он хранится в базе данных. Теперь, часто это нормально, но как насчет того, когда вы не хотите, чтобы кто-то мог манипулировать им? Честно говоря, во многих бизнес-приложениях это очень распространено. Например, вы не хотите, чтобы кто-то менял номер учетной записи (не лучший пример, но вы поняли эту идею) по URL-адресу по понятным причинам. Таким образом, вам нужно будет проверить номер учетной записи для зарегистрированного пользователя по каждому запросу. Очевидно, что это не реалистичное решение, и в веб-формах многие люди будут хранить что-то подобное в сеансе. Я стараюсь слишком мало полагаться на сессию в MVC, но, кроме этого, я бы просто пошел в старую школу и использовал скрытые поля?ASP.NET MVC Использование идентификаторов в URL-адресах

Как к этому подходят другие?

+0

Я думаю, что атрибут 'Authorize' поможет вам в вашей ситуации. См. Пример NerdDinner, если вы не знакомы с атрибутом: http://nerddinnerbook.s3.amazonaws.com/Part9.htm –

ответ

0

Способ, которым это было обработано в одном месте, на котором я работал, было проверить реферер в объекте Request. Если реферер был пустым или нет из текущего домена, не показывайте им страницу.

Request.UrlReferrer 

Это действительно сработало довольно хорошо.

1

На самом деле, для обеспечения безопасности вы все равно должны проверять права пользователей, прошедших аутентификацию, по каждому запросу. Возможно, вы можете расширить атрибут Authorize, чтобы он соответствовал вашим потребностям. И скрытое поле немного лучше, чем параметр url, поскольку они легко меняются с помощью инструментов разработчика IE или Firebug.

+0

Я согласен на 100%. См. Этот родственный вопрос и ответ: http://stackoverflow.com/questions/1723323/protecting-ids-on-a-url-in-asp-net-mvc – Michael

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