2013-03-15 4 views
1

Я знаю, что состояние представления не существует в mvc. Я ищу что-то похожее на режим зашифрованного состояния представления в веб-формах asp.net. Я хочу скрыть некоторые данные в запросе.Зашифрованное состояние представления в asp.net mvc

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

Данные не будут отображаться вообще. Мне просто нужно передать его позже для обслуживания.

+1

«Я не хочу, чтобы пользователь мог изменять данные или видеть их». Есть много способов сделать это, но так или иначе какая-то часть вашего веб-приложения * должна будет увидеть данные *, которые также (как правило) означают, что если что-то должно произойти на стороне клиента, то одним способом или другой, пользователь также будет иметь к нему доступ, если они знают, как использовать отладчик. Это не значит, что вы не можете принимать меры, чтобы сделать это болезненным/утомительным для получения данных, конечно. – JayC

+1

Зашифрованное состояние представления - это совсем другое дело. Сервер получает доступ только к стороне сервера ключей расшифровки. Так как вы хотите, чтобы ваше приложение отображало * клиентскую часть данных, вашему приложению пришлось бы расшифровать клиентскую сторону, что требует предоставления вашему клиентскому приложению ключа/метода дешифрования. – JayC

+0

Снова прочитайте PLS. Я просто хочу скрыть полностью скрытые поля. Таким образом, пользователь не сможет изменить или увидеть эти данные. И я могу повторно использовать его на стороне сервера, не опасаясь, что он был изменен. –

ответ

1

Таким образом, я нашел ответ на мой вопрос. Существует MVC3Futures project, который добавляет желаемое поведение.

Можно сериализовать модель entier и зашифровать ее.

@Html.Serialize("Transfer", Model, SerializationMode.EncryptedAndSigned) 

Связывание в контроллере осуществляется путем добавления десериализованного атрибута.

public ActionResult Transfer(string id,[Deserialize(SerializationMode.EncryptedAndSigned)]Transfer transfer) 
0
  1. Хотя я действительно не знаю, что вы шифруете. но если вы хотите избежать CSRF или фальсификации данных, то пойдите для этого.

Вы можете использовать AntiForgeryToken() для подтверждения повторных попыток подделать данные. Флаг анти-подделки может использоваться для защиты вашего приложения от подделки подпроса. Чтобы использовать эту функцию, вызовите метод AntiForgeryToken из формы и добавьте атрибут ValidateAntiForgeryTokenAttribute к методу действий, который вы хотите защитить.

В целях использования, как этот AntiForgeryToken

@Html.AntiForgeryToken() 

В контроллерах

[ValidateAntiForgeryToken] 
Public ActionResult SomeAction() 
{ 
    return view() 
} 
+0

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

+1

@jansalawa Правило № 1 никогда не доверяет пользовательским входам. и не храните такую ​​информацию на стороне клиента. у него могут быть лучшие инструменты для вмешательства в данные –

1

Вам просто нужно шифровать значение перед вводом в поле ввода скрытом затем расшифровать его на сервере, когда он размещен.

Посмотрите, как сделать простое шифрование/дешифрование на C#. Вот несколько хороших реализаций:

http://www.joshrharrison.com/archive/2009/01/28/c-encryption.aspx

https://stackoverflow.com/a/5518092/160823

+0

да и подписать его, чтобы я знал, изменил ли пользователь его. Я пытался найти что-то вроде зашифрованного состояния представления, которое реализовано с помощью фреймворка. –

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