例如: 服务器端是Asp.net MVC, 客户端是KnockoutJS。
从安全和标准的角度来看: 服务器是否可以输出编辑链接,客户端代码然后根据javascript viewmodel属性设置控件的可见性,例如“HasEditPermission”?
或者MVC Razor语法是否应该根据viewmodel选择性地输出控件?
传统上这一切都将在服务器端完成,但是现在大多数数据绑定都发生在客户端上,它通过在Razor和KnockoutJS中使用条件逻辑来解决问题。
不言而喻,服务器会根据权限验证所有回发,因此无法升级权限。同样可以指出,“朦胧不是安全”的概念确实在这里发挥作用。仅仅因为编辑链接不存在并不意味着攻击者尝试使用webb / users / edit / 1
并不明显答案 0 :(得分:1)
我务实地认为,如果您能够以相当干净的方式在页面生成时通过Razor输出条件Knockout视图模型和数据绑定表达式等,而不需要太多的黑客和设计权衡,那么就这样做。但只要你没有在你的Javascript或DOM(密码,秘密令牌等)中存储安全相关数据,那么我就不会因为使用客户端逻辑来决定是否使编辑链接可见或不。正如您所说,任何人都可以修改现有的URL,无论如何都可以获得正确的访问权限 - 这就是资源本身在请求时进行适当检查的原因。
通常使用Knockout样式用户界面,您可以根据动态客户端条件提供某些链接/按钮 - 以及实际“安全漏洞”之间的区别以及有人露出不足的服务器防护代码和错误消息的人使用Firebug进行黑客攻击的应用程序逻辑变得有点模糊。我会说做什么是明智的,并且与您特定业务背景的风险/风险成比例。