【问题标题】:Controlling visibility of HTML controls through javascript based on security model基于安全模型通过javascript控制HTML控件的可见性
【发布时间】:2012-07-12 09:02:37
【问题描述】:

例如: 服务器端是 Asp.net MVC, 客户端是 KnockoutJS。

从安全和标准的角度来看: 服务器输出编辑链接和客户端代码然后根据javascript viewmodel属性(例如“HasEditPermission”)设置控件的可见性是否可以接受?

或者 MVC Razor 语法是否应该根据视图模型选择性地输出控件?

传统上这一切都在服务器端完成,但是现在大多数数据绑定都发生在客户端上,它通过在 Razor 和 KnockoutJS 中使用条件逻辑来混合关注点。

不言而喻,服务器会根据权限验证所有回发,因此不可能提升权限。公平地说,“默默无闻不是安全”的概念在这里确实发挥了作用。仅仅因为编辑链接不存在并不意味着攻击者不明显地尝试您的网站/用户/编辑/1

【问题讨论】:

  • 您向攻击者公开的信息越多,他们成功的可能性就越高。

标签: javascript asp.net-mvc-3 security knockout.js viewmodel


【解决方案1】:

我对此的务实看法是,如果您可以在页面生成时以相当干净的方式通过 Razor 输出条件 Knockout 视图模型和数据绑定表达式等,而无需太多的黑客攻击和设计权衡,那么就这样做。但是,只要您没有在 Javascript 或 DOM(密码、秘密令牌等)中存储与安全相关的数据,那么我就不会因为使用客户端逻辑来决定是否使编辑链接等内容可见或不是。正如您所说,任何人都可以修改他们已被授予合法访问权限的现有 URL - 这就是资源本身在请求时进行适当检查的原因。

通常使用 Knockout 风格的 UI,您可能会根据动态客户端条件使某些链接/按钮可用 - 以及什么是实际的“安全漏洞”和什么是有人厚颜无耻地暴露不足的服务器保护代码和窃听之间的区别通过使用 Firebug 破解事物,您的应用程序逻辑变得有点模糊。我会说做明智的事情,并且与您的特定业务环境的风险/风险成正比。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多