是't angularjs ui路由器解决不安全问题

isn't the angularjs ui-router resolve insecure?

本文关键字:路由器 解决 不安全 问题 ui angularjs      更新时间:2023-09-26

如果我有当前状态

.state("display",
    {url:"/display",templateUrl:"display.ng.html",
    controller:"DisplayController",
    controllerAs:"displayController"})

我在状态中添加了一个解析,这样只有登录的人才能访问该路线,例如:

resolve: {
    "currentUser": ["$meteor", function($meteor){
      return $meteor.requireUser();
    }]
  }

*取自http://angular-meteor.com/tutorial/step_08

这不是造成了一个安全漏洞吗?

难道没有人能在浏览器中打开控制台并"重写"路线,这样就不需要用户了吗?

如果我们针对前面提出的问题,"是"将是简短的答案。然而,这个答案背后的真相是,它并不是为了安全而设计的,因为这是不可能的。用户/客户端下载完页面的那一刻,从技术上讲,他们就可以完全访问你给他们的一切。无论你在客户端采取多少预防措施,人们都可以保存你的文件,随意编辑,然后使用这些文件重新加载页面。他们可以去他们想要的任何路线,运行他们想要的javascript,等等。

这是什么意思?永远不要信任用户。曾经如果你不想让别人看到什么,就不要把它包括在回应中。如果你在客户端隐藏它,没有什么能阻止用户打开源查看器,只需在文件中挖掘即可找到它。即使你缩小了所有内容,有足够驱动器的人也可以找到所有内容。

同样适用于API调用、套接字通信等。客户端可以发送他们想要的任何内容。如果他们知道URL、预期数据和发送方法,他们就可以创建自己的假客户端,并发送他们想要的任何内容。这就是为什么客户端验证几乎只对UI原因有用(将框标记为红色,通过拒绝表单节省时间等),但您必须重新验证并重新检查服务器端的所有内容。

tl;dr-是的,它"不安全",但这不是angular/ui路由器的错。这就是客户端开发的方式。如果你不想让没有访问权限的用户看到某些内容,请不要将其包含在你发送给他们的数据/文件中。检测它并将其从服务器端剥离。