【发布时间】:2016-08-07 02:10:33
【问题描述】:
我实际上是在使用流星创建我的第一个应用程序,特别是使用 Angular 2。我使用过 Angular 1 和 2,因此基于它。我有一些担心...
让我们想象一下这个场景......我的数据存储在 MongoDb 上:
集合:客户
{
name : "Happy client",
password : "Something non encrypted",
fullCrediCardNumber : "0000 0000 0000 0000"
}
现在,在我的流星客户端文件夹中,我有这个结构......
收集clients.ts(服务器文件夹)
export var Clients = new Mongo.Collection('clients');
组件client.ts(不是服务器文件夹)
import {Clients} from '../collections/clients.ts';
class MyClients {
clients: Array<Object>;
constructor(zone: NgZone) {
this.clients = Clients.find();
}
}
..最后:渲染它的 html 页面,但只显示客户端的名称:
<li *ngFor="#item of clients">
{{client.name}}
</li>
到目前为止还可以。但我担心的是:在 Angular 1 和 2 应用程序中,组件或控制器或指令在客户端而不是服务器端运行。
我设置我的 html 只是为了显示客户的名称。但是由于它是 ah html 渲染,可能通过一些技巧很容易将一些代码注入到 Angular 上的 HTML 渲染中以显示我的所有字段。
或者可以很容易地转到控制台并键入一些命令来显示数据库集合中的整个对象。
所以,我的问题是:从这个意义上说,流星有多安全?我的担忧正确吗?流星是否能够保护我的数据,保护收藏品的名称?我知道我可以在 find() 上指定不给我带来那些敏感数据,但是由于 find() 可能不在服务器端运行,所以可以很容易地即时修改它,不是吗?
无论如何...我会很感激有关流星在这个意义上是安全(或不安全)的解释。
ty!
【问题讨论】:
-
这是一个很大的话题。我建议阅读指南的security 部分。
-
一般来说(非常一般地)你不应该发送他们无权访问的数据,这样如果他们是恶意的,他们只会看到允许看到的数据。您的客户端永远不安全,所以不要相信它不会公开数据、执行验证等。
-
是的,但请记住:您有一个 client.find() 在客户端运行...我可以放置类似 client.find 的内容(仅我希望的字段)...那就是好的...但是由于 find() 命令将在客户端运行,因此任何人都可以轻松执行诸如 client.find(everything ,包括敏感数据)之类的东西 - 看起来很容易从客户端。我想弄清楚我的理论是否正确。
标签: angularjs meteor angular angular-meteor angular2-meteor