1

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

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

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

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

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

4

1 回答 1

1

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

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

于 2012-07-24T04:32:15.803 回答