禁用为用户

时间:2016-01-15 12:38:40

标签: javascript parse-platform

我为必须拥有私人文件的用户构建服务。

实际上,通过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

1 个答案:

答案 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
}