如何防止范围对象被更改?
How to guard against scope objects getting changed?
我是一个 Angular 菜鸟。在我接管的一个应用程序中,范围内有一个对象定义了当前用户的角色(例如 user.role=REGULAR
)。
有没有办法阻止用户打开 firebug 和更改 user.role=ADMIN
?
例如,我看到了根据范围内的值显示选项卡的代码,但我不确定如何防止用户更改该值(并获得对选项卡的访问权限)。有没有一种模式可以解决这个问题?是否所有与访问相关的内容都需要直接来自 Web service/protected 远程位置?
好吧,您可以尝试将对象隐藏在闭包中或在支持它的浏览器中使用 Object.freeze
,但是无法回避这样一个事实,即代码被发送到闭包并在其上执行客户。即使有防止修改的万无一失的方法(目前还没有),客户端也可以在到达浏览器之前在 Fiddler 或其他东西中修改有效负载。
考虑到这一点,对于 access/authorization,您不能信任客户端上的 任何东西;您必须在服务器上对此进行验证,否则您将拥有安全 holes/risks.
没有办法做到这一点。您的设计存在根本性问题;它依赖于客户端验证。
您可以永远永远相信来自客户的任何东西。任何你真正想要验证或认证的事情都必须在服务器端完成,尤其是与安全相关的事情。
最重要的规则是,一旦它离开服务器并到达客户端,它就不受您的控制了。假设它遭到破坏,假设它不值得信任,并假设您必须检查所有内容。
在您的情况下,如果用户不是管理员,甚至不要向他们提供管理员选项。
我是一个 Angular 菜鸟。在我接管的一个应用程序中,范围内有一个对象定义了当前用户的角色(例如 user.role=REGULAR
)。
有没有办法阻止用户打开 firebug 和更改 user.role=ADMIN
?
例如,我看到了根据范围内的值显示选项卡的代码,但我不确定如何防止用户更改该值(并获得对选项卡的访问权限)。有没有一种模式可以解决这个问题?是否所有与访问相关的内容都需要直接来自 Web service/protected 远程位置?
好吧,您可以尝试将对象隐藏在闭包中或在支持它的浏览器中使用 Object.freeze
,但是无法回避这样一个事实,即代码被发送到闭包并在其上执行客户。即使有防止修改的万无一失的方法(目前还没有),客户端也可以在到达浏览器之前在 Fiddler 或其他东西中修改有效负载。
考虑到这一点,对于 access/authorization,您不能信任客户端上的 任何东西;您必须在服务器上对此进行验证,否则您将拥有安全 holes/risks.
没有办法做到这一点。您的设计存在根本性问题;它依赖于客户端验证。
您可以永远永远相信来自客户的任何东西。任何你真正想要验证或认证的事情都必须在服务器端完成,尤其是与安全相关的事情。
最重要的规则是,一旦它离开服务器并到达客户端,它就不受您的控制了。假设它遭到破坏,假设它不值得信任,并假设您必须检查所有内容。
在您的情况下,如果用户不是管理员,甚至不要向他们提供管理员选项。