【问题标题】:exposure of DAL in razor views剃刀视图中 DAL 的暴露
【发布时间】:2014-09-02 13:48:17
【问题描述】:

我使用 Entity Framework 6,代码优先方法,以及 asp.net mvc 5。

razor 视图都是强类型的,并且大多数都使用包含 DAL 模型的视图模型。一些视图直接使用 DAL 中的模型。我想知道这会带来什么样的安全风险。让我演示一下:

public class SomeViewModel {
    public SomeModel SomeModel {get;set;}
    public int OtherProperty {get;set;} 
}

在剃刀视图中:

@model SomeViewModel

我向 razor 视图公开的是,除其他外,有 2 个潜在的安全风险:SomeModel 实例的 db id 和实体的动态代理 id(或其他任何东西),我猜这与实体的延迟加载。

System.Data.Entity.DynamicProxies.SomeModel_2ED515217...etc

所以我的计划是确保所有剃须刀视图仅使用视图模型。此外,所有视图模型都应排除上述 2 项,即 db id 和动态代理 id。

所以SomeViewModel 会变成这样:

public class SomeViewModel {
    public int SomeModelId {get;set;}
    public string SomeModelPropA {get;set;}
    public string SomeModelPropB {get;set;}
    public int OtherProperty {get;set;} 
}

总而言之,对模型使用的剃刀视图进行非常严格的限制是个好主意吗? 我知道 razor 视图是服务器端编译的,但是如果 razor 开发人员不小心使用了一些“禁止”视图模型属性怎么办?

【问题讨论】:

    标签: asp.net-mvc security razor model viewmodel


    【解决方案1】:

    好吧,只要你不把这些东西暴露在你的服务器之外,这很好......但即使用户会看到你的记录的数据库 ID - 只有当他可以用它做某事时才会出现安全风险.在那之前——这只是一个数字。您最好考虑如何保护编辑/删除操作:)

    既然我们在那里 - 想想一件事 - 当您剥离所有标识符的视图模型时 - 在尝试更新用户的更改时您将如何映射回来?当然,如果 ViewModel 是只读的,这不是问题。

    但无论如何 - 我强烈建议从 ViewModel 对象中删除整个模型对象 - 只留下一些标识符。如果您有安全方面的顾虑 - 或许可以先尝试散列它们?

    并且在 ViewModel 中只保留所需的少数字段/属性。并严格定义。不仅是出于安全原因,也是为了降低内存/传输数据使用量。

    【讨论】:

    • 非常感谢! viewmodel 当然会根据需要包含标识符,将阐明代码示例
    猜你喜欢
    • 2011-03-26
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    相关资源
    最近更新 更多