【问题标题】:isn't the angularjs ui-router resolve insecure?不是angularjs ui-router解析不安全吗?
【发布时间】:2015-06-30 22:59:22
【问题描述】:

如果我有当前状态

.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

这不会造成安全漏洞吗?

任何人都不能在他们的浏览器中打开控制台并“重写”路由以使其不需要用户吗?

【问题讨论】:

  • 您仅在客户端执行的任何限制都是安全漏洞。只要您的服务器正确限制用户做他们不应该做的事情,您就是安全的。
  • 使用 $cookies 如果人们明确登录我们会在 cookie 中存储一些用户数据
  • 我们只是不渲染/包含我们软件的秘密部分。这是唯一的方法。永远不要相信用户。您发送给他们的任何内容,他们都可以访问。他们可以发送给您的任何东西都必须经过验证。交通规则。
  • 你会很快意识到担心这种“安全漏洞”是一个没有实际意义的问题,因为技术娴熟的人可以深入研究和更改你的 javascript一起跳过你的 javascript,直接去服务器获取他们想要的东西。
  • @KevinB 你是对的,虽然我可以通过服务器上的用户验证来保护自己,但我还希望阻止人们通过 Angular 片段看到页面。如果他们能看到该页面,那么他们就更了解请求的参数,并且无需进行一些猜测。

标签: javascript angularjs security meteor


【解决方案1】:

如果我们针对前面设置的问题,“是”将是简短的回答。不过,这个答案背后的真相是,它的设计初衷不是为了安全,因为这是不可能的。用户/客户完成页面下载后,从技术上讲,他们可以完全访问您提供给他们的所有内容。无论您采取多少客户端预防措施,人们都可以保存您的文件,随意编辑它们并使用这些文件重新加载页面。他们可以去任何他们想要的路线,运行他们想要的任何 javascript,等等。

这是什么意思?永远不要相信用户。曾经。如果您不希望某人看到某些内容,请不要将其包含在响应中。如果您在客户端隐藏它,则不会阻止用户打开源查看器并只是在文件中挖掘以找到它。即使你缩小和一切,那里的人,有足够的驱动力,可以找到一切。

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

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

【讨论】:

  • 只是补充一点 - 这就是第 8 步主要是围绕使用 Parties.allow 语法保护后端的原因。 ui-router 只是一个很好的补充,不是为了完全安全
猜你喜欢
  • 1970-01-01
  • 2017-11-24
  • 2015-09-27
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多