ASP.Net MVC 3: пользовательский механизм связывания данных для преобразования данных, поступающих из / поступающих в БД - PullRequest
1 голос
/ 07 февраля 2012

Я работаю над проектом ASP.Net MVC 3, в котором я хотел бы зашифровать все электронные письма, хранящиеся в базе данных, для дополнительной защиты на случай, если какой-нибудь хакер когда-нибудь получит доступ к БД, и мне было интересно, как лучше всего это сделатьдля достижения этой цели.

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

Мымогу представить, что у меня есть эта модель POCO:

public partial class Contact
{  
    public virtual int ContactId { get; set; }
    public virtual string Name { get; set; }
    public virtual string Email { get; set; }
}

Мне нужен способ зашифровать свойство Email, когда оно сохраняется в базе данных, и расшифровывать, когда оно загружается из базы данных.

Один из способов сделать это - иметь дополнительное свойство UnencryptedEmail в моей модели контактов, которое будет содержать метод получения и установки, который расшифровывает и шифрует свойство электронной почты, но я считаю, что добавление дополнительного свойства не такочистить решение.

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

Ответы [ 3 ]

0 голосов
/ 07 февраля 2012

Подумайте об использовании подхода Model View вместо прямой привязки к моделям и их отображения в представлениях.

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

0 голосов
/ 09 февраля 2012

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

http://codefirstmembership.codeplex.com/

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

Я понимаю, что это займет много времени, но на это стоит взглянуть.

0 голосов
/ 07 февраля 2012

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

При хранении электронной почты ваш бизнес-уровень получит простой адрес электронной почты в качестве входных данных от прикладного уровня, зашифрует его и передаст зашифрованное значение в хранилище.

При получении электронной почты ваш бизнес-уровень получит электронную почту в зашифрованном виде из хранилища, расшифрует ее и передаст обратно на прикладной уровень.

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

...