2013-12-09 2 views
2

Так что я работаю над проектом webfrom в mvc4 и Razor, мне нужно хранить информацию о счетах в сеансе, а только разрешено изменять их. Я написал класс, чтобы попытаться реализовать его.Предотвращение внешнего кода, изменяющего личные данные в C#

мой код

public static class AccountProvider 
{ 
    public static bool Login(this HttpContextBase ctx 
     , string userName, string password) 
    { 
     var account = new AccountBase{UserName = userName}; 
     ctx.Session["Account"] = account; 
     return true; 
    } 

    public static string GetName(this HttpContextBase ctx) 
    { 
     var account = ctx.Session["Account"] as AccountBase; 
     return account.UserName; 
    } 

    private class AccountBase 
    { 
     public string UserName { get; set; } 
    } 
} 

, и я могу войти с этим:

HttpContext.Login("Admin","1234567"); 

затем показать информацию о счете в представлении:

Hello @(Context.GetName())! 

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

можно легко использовать следующий код в поле зрения страниц изменить информации об учетной записи:

Hello @(Context.GetName())! //print "Hello Admin!" 
@{ 
    var account = Session["Account"]; 
    var type = account.GetType(); 
    var item = Activator.CreateInstance(type); 
    var p = type.GetProperty("UserName"); 
    p.SetValue(item, "aaaaa"); 
    Session["Account"] = item; 
} 
Hello @(Context.GetName())! // print "Hello aaaaa!" 
  • Есть ли способ, чтобы действительно предотвратить внешний код модификации частных данных в MVC C#?
  • Как я могу хранить информацию о безопасности (например, информацию об учетной записи) безопаснее?

Оценка за любое предложение.

ответ

0

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

Если вам нужно использовать плагины, вы можете изолировать их и отказаться от разрешения отражения. Прочтите How to deny reflection using ReflectionPermission для получения дополнительной информации

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