是否可以轻松地对使用FileSystem API编写的沙箱中的所有文件进行正常(反模糊)访问?

时间:2013-10-06 12:44:14

标签: html5 google-chrome filesystems html5-filesystem

我使用Filesystems API写入Chrome的沙盒存储中的新文件:

准备FS:

window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;

function errorHandler(e) {
  var msg = '';

  switch (e.code) {
    case FileError.QUOTA_EXCEEDED_ERR:
      msg = 'QUOTA_EXCEEDED_ERR';
      break;
    case FileError.NOT_FOUND_ERR:
      msg = 'NOT_FOUND_ERR';
      break;
    case FileError.SECURITY_ERR:
      msg = 'SECURITY_ERR';
      break;
    case FileError.INVALID_MODIFICATION_ERR:
      msg = 'INVALID_MODIFICATION_ERR';
      break;
    case FileError.INVALID_STATE_ERR:
      msg = 'INVALID_STATE_ERR';
      break;
    default:
      msg = 'Unknown Error';
      break;
  };

  console.log('Error: ' + msg);
}

var fileSystem;

function onInitFs(fs) {
  console.log('Opened file system: ' + fs.name);
  fileSystem = fs;
}

navigator.webkitPersistentStorage.requestQuota(1024*1024, 
  function(gB){
    window.requestFileSystem(PERSISTENT, gB, onInitFs, errorHandler);
  }, function(e){
    console.log('Error', e);
})

写文件:

fileSystem.root.getFile('log.txt', {create: true}, function(fileEntry) {

    // Create a FileWriter object for our FileEntry (log.txt).
    fileEntry.createWriter(function(fileWriter) {

      fileWriter.onwriteend = function(e) {
        console.log('Write completed.');
      };

      fileWriter.onerror = function(e) {
        console.log('Write failed: ' + e.toString());
      };

      // Create a new Blob and write it to log.txt.
      var blob = new Blob(['Lorem Ipsum'], {type: 'text/plain'});

      fileWriter.write(blob);

    }, errorHandler);

}, errorHandler);

之后我在./ChromeFolder/FileSystem/003/p/00/00000000中找到了一个带有Lorem Ipsum内容的新文件(用十六进制编辑器读取)。

obfuscated file name

我认为我可以将沙盒FS作为普通的安装FS访问,因此我有正常的文件和目录名称。相反,我看到一些模糊的文件名(00000000而不是预期的log.txt),而不是我期望的结构。

像这样:

expected picture

是否可以将此Sandboxed FS作为普通FS访问,因此我可以管理所有文件,因为我使用FileSystems API在Chrome中创建它们(我的意思是结构和文件名),或者它是不可能的,并且它仍然是混淆的Chrome的外部?

是否有任何技巧,Chrome中的任何标记更改都能达到我的预期效果?

1 个答案:

答案 0 :(得分:2)

与许多人一样“为什么我不能 _ __ _ __ ?”有点问题,答案是“安全”。而对你的问题的简短回答是“不”。文件系统API专门设计为Web客户端(例如浏览器)的方法,仅通过API 为开发人员提供类似文件系统的存储结构,而不是来自外部。

API规范的“4.3 Security Considerations”部分完全解决了您正在尝试的行为。如果客户端要使用其实际文件名存储原始文件(例如,“FinanceReport.doc”),那么它将使受感染机器上的恶意软件更容易找到并利用通过文件系统API存储的敏感数据。此外,如果使用了实际文件名,则可以使这些文件可执行,例如在具有该名称的本地文件系统上存储“EvilActions.exe”。 (注意:某些客户端,例如Chrome,甚至不允许您存储可执行文件。)这些是您看到文件和存储混淆的一些原因。实际上,API没有明确指定客户端应该存储数据的 ,只有本地存储会引发客户端应该解决的安全问题。

我最近完成了HTML5的全面安全评估,包括文件系统API。我向您保证,如果API既成熟又作为API和客户端实现,您几乎肯定会看到进一步的措施来阻止或至少混淆本地存储的数据与客户外部的访问。为了进一步支持本地存储安全性,客户端甚至可能将整个事物存储为一个大文件,类似于MS Access如何使用.mdb文件进行存储。同样,这完全取决于客户。因为您尝试对API之外的数据/文件进行一种后门访问,并且以API中特别称为“安全问题”的方式这样做,所以您今天使用的任何“解决方案”都可能随着客户安全的成熟,明天就会失败如果您可以出于合法目的这样做,恶意软件作者可以做的是出于恶意目的,客户端制造商将尽其所能来防止这种情况。