Так что я работаю над проектом 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#?
- Как я могу хранить информацию о безопасности (например, информацию об учетной записи) безопаснее?
Оценка за любое предложение.