Angular/MEAN.io中的路由安全漏洞?

6
我刚刚安装了MEAN技术栈(MongoDB、Express.js、AngularJS和Node.js),并打开了示例程序(如在mean.io上找到的)。他们有一个基本的应用程序,你可以登录并创建博客“文章”进行测试等。
不管怎样,我从URL中删除了“#!”,然后它输出了整个用户和文章模型,就像它们在数据库中一样。似乎这样做使其停止通过Angular路由,而是使用Express路由,这只是JSON REST API。这是MEAN技术栈包,整个Angular,还是可能只是开发环境设置的缺陷?我无法想象会发布一个像这样的巨大缺陷,但也许我漏掉了什么。。
可复制的步骤:
- 按照http://mean.io上的安装说明进行操作。 - 在浏览器中转到本地应用程序并创建帐户并登录。 - 创建一篇文章。 - 查看您刚创建的文章项目并从URL中删除#!,然后您将看到已登录用户帐户的JSON对象,包括哈希密码和盐以及文章对象。

1
这只是一个示例,而不是生产就绪的系统:“它旨在为您提供快速和有组织的方式来开始开发基于MEAN的Web应用程序,并预先捆绑和配置了有用的模块,如mongoose和passport。” - WiredPrairie
1
我在他们的GitHub问题页面上发表了评论,现在已经修复了。 - ShrekOverflow
2个回答

8

这只是一个应用程序的配置。如果你想要改变routes.js文件的内容:

app.get('/articles', articles.all);

为了:

app.get('/articles', auth.requiresLogin, articles.all);

如果你尝试直接访问/articles的链接,你会看到以下信息:"用户未被授权",而不是JSON格式的文章列表。针对这种情况,需要进行相应处理。

6
正如你所说,去掉#!会导致路由由服务器处理。然后node API会将用户对象转储到响应中。
这个问题与Angular完全无关 - 应用程序只在/路由上由Node提供服务。然后,Angular使用哈希值来显示正确的页面。
这可能只是MEAN提供的示例的问题。该应用程序本身是不安全的,当他们谈到最佳实践时,指的是代码结构和设置而不是快速演示。
你可以问他们,因为可能会有人基于示例进行构建并且不修复安全问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接