gpt4 book ai didi

javascript - Parse.com 安全 : can I save an object and claim it's another user's?

转载 作者:行者123 更新时间:2023-11-30 12:38:23 25 4
gpt4 key购买 nike

我正在查看 this example使用javascript对博客系统进行建模,代码片段复制如下:

var user = Parse.User.current();

// Make a new post
var Post = Parse.Object.extend("Post");
var post = new Post();
post.set("title", "My New Post");
post.set("body", "This is some great content.");
post.set("user", user);
post.save(null, {
success: function(post) {
// Find all posts by the current user
var query = new Parse.Query(Post);
query.equalTo("user", user);
query.find({
success: function(usersPosts) {
// userPosts contains all of the posts by the current user.
}
});
}
});

它基本上创建了一个帖子对象,并将当前用户对象设置到它的 user 字段。要显示当前用户的所有博客文章,它会查询所有将 user 字段设置为当前用户的博客文章。

但由于默认情况下 User 表对所有用户都是只读的,这不会有问题吗,恶意用户 (X) 可以创建随机帖子和“通过将这些帖子的 user 字段设置为 Y 来声称它们是由另一个用户 (Y) 创建的,因为他从 用户表?因此结果是,当系统显示用户 Y 的帖子时,除了 X“伪造”的帖子之外,他还会看到他所有的真实帖子。

是否需要以某种方式对 User 表进行 ACL 缓解?但如果这是解决方案,那么为什么任意用户可以看到整个 User 表的默认行为是什么?

最佳答案

Cloud Code 是您的 friend 。

在这种情况下,您需要一个 beforeSave 处理程序,将 user 字段锁定到新对象上当前经过身份验证的用户,并在他们更新帖子时拒绝保存并尝试更改 user 字段(或者只是使用 ACL 来防止除帖子所有者之外的所有人修改帖子行)。

像这样:

Parse.Cloud.beforeSave('Post', function(request, response) {
var post = request.object;
var user = request.user;
if (post.isNew()) {
post.set('user', user);
response.success();
} else {
// any special handling you want for updates, e.g.:
if (post.dirty('user')) {
response.error('Cannot change the owner of a Post!');
} else {
response.success();
}
}
});

我推荐的处理诸如“帖子”之类的更新的方法是阻止所有更新。在数据浏览器中类的“设置权限”中,我将更改以下内容:

Update : Disabled
Delete : Disabled

要禁用某些功能,只需取消勾选“任何用户都可以执行此操作”。或者,您可能希望分配“管理员”或“版主”等 Angular 色,以允许这些人直接更新/删除项目。

只有在使用 useMasterKey() 时,这些功能才能通过 Cloud Code 实现,例如:

Parse.Cloud.define('deletePost', function(request, response) {
var postID = request.params.postID;
var query = new Parse.Query('post');
query.get(postID).then(function (post) {
if (post) {
// post found
var postOwner = post.get('user');
if (postOwner.id == request.user.id) {
// we let the owner delete their own posts

// NOTE: need to use the master key to modify/delete posts
Parse.Cloud.useMasterKey();

post.destroy().then(function () {
// TODO: delete all replies too?
response.success();
}, function (error) {
response.error(error);
});
} else {
response.error('Only the owner of a post can delete it!');
}
} else {
// post not found, might as well respond with success
response.success();
}
}, function (error) {
response.error(error);
}
});

关于javascript - Parse.com 安全 : can I save an object and claim it's another user's?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25346707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com