我正在阅读meanjs项目的源代码,以便更好地学习javascript和MEAN。有一个表达式:
<!--Embedding The User Object-->
<script type="text/javascript">
var user = {{ user | json | safe }};
</script>
据我所知,它将用户记录作为json对象发送到浏览器,但无法在google上找到“安全”过滤器。有谁能请我指出正确的方向或解释这是什么?
答案 0 :(得分:1)
是的,用户对象实际上已传递给浏览器,它实际上显示在源代码中。在实践中,我部署的应用程序在源代码中有这个(实际数据一般化):
<!--Embedding The User Object-->
<script type="text/javascript">
var user = {"_id":"123abc456xyzetc","displayName":"First Last","provider":"local","username":"newguy","__v":0,"roles":["admin"],"email":"my@email.com","lastName":"Last","firstName":"First"};
</script>
如您所见,它实际上将用户信息转储到源代码中,这不是开发应用程序最安全的方式。如果您在layout.server.view.html文件(var user = {{ user | json | safe }};
)中注释掉或删除该行,那么您就无法登录。它会让您登录,然后立即将您踢出去。
但是,您会在config > passport.js
文件中注意到某些信息在传回浏览器之前已被删除,从第14行开始:
// Deserialize sessions
passport.deserializeUser(function(id, done) {
User.findOne({
_id: id
// The following line is removing sensitive data. In theory, you could remove other data using this same line.
}, '-salt -password -updated -created', function(err, user) {
done(err, user);
});
});
但是,如果您决定删除其他字段,请注意这可能会破坏您的应用。例如,我移除了用户ID,并且我的大多数应用都工作了,但它打破了一些特定的功能(我相信这是文章,如果我没记错的话)。