我为必须拥有私人文件的用户构建服务。
实际上,通过Cloud Code,我可以通过一个函数来控制下载流量。但是,我如何阻止黑客使用javascript控制台并上传他的文件?他会得到一个链接,他可以不受限制地和任何人分享我的费用。
const file = Parse.File('hackerFile', hackerFileArray);
file.save().then(() => console.log(file.url)) // Now, he have a free file hosting.
除主密钥外,有没有办法为所有人完全删除此功能?
在http://todolist.parseapp.com/
上托管文件的示例在浏览器中打开控制台,然后
var script = document.createElement('script');
script.src = '//www.parsecdn.com/js/parse-1.6.14.min.js'; // Because of their version.
document.head.appendChild(script);
Parse.initialize("0Oq3tTp9JMvd72LOrGN25PiEq9XgVHCxo57MQbpT", "vUFy2o7nFx3eeKVlZneYMPI2MBoxT5LhWNoIWPja"); // Found in their sources
var reader = new FileReader();
var input = document.createElement('input');
input.type = 'file';
document.body.appendChild(input);
// Then choose a file from the browser. I choosen a picture.
reader.onloadend = function() {
var file = new Parse.File('hackFile', {base64: reader.result});
file.save().then(function() {
console.log(file.url());
})
};
reader.readAsDataURL(input.files[0]);
然后你有一个链接。我得到了http://files.parsetfss.com/ae2ddbce-9cc0-4e1a-a16d-52ec5fdb7570/tfss-8fccfba0-ccf7-41cd-8f42-75f0a3478262-hackFile
答案 0 :(得分:0)
没试过,但认为它可行:
1)在你想要阻止这种行为的任何类上添加一个beforeSave函数。
2)在beforeSave中,检查request.object.dirtyKeys()并遍历新创建的对象上的每个键。
3)如果与其中一个dirtyKeys相关联的值是文件,则不允许保存文件:response.error
Parse.Cloud.beforeSave(Parse.User, function(request, response) {
var dirtyKeys = request.object.dirtyKeys();
for (var i = 0; i < dirtyKeys.length; ++i) {
var dirtyKey = dirtyKeys[i];
if (isUnwantedFile(request.object, dirtyKey)) {
response.error("User is not allowed to store files");
return;
}
}
response.success();
});
//note this function is untested -- I'm not sure what type a user-created file would be,
//but basically if you can figure that out, substitute it in here
function isUnwantedFile(obj, key){
return typeof obj[dirtyKey] === Parse.File
}