我使用 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
内容(用十六进制读取它) -编辑)。
我认为我可以像正常安装的 FS 一样访问沙盒 FS,这样我就有正常的文件和目录名称。相反,我看到了一些混淆的文件名(00000000
而不是预期的 log.txt
),而不是我预期的结构。
像这样:
是否可以像普通 FS 一样访问这个沙盒 FS,以便我可以在使用 FileSystems API(我的意思是结构和文件名)在 Chrome 中创建文件时管理所有文件,或者是否不可能,并且它会保持混淆状态Chrome 的外部?
Chrome 中是否有任何技巧或任何标志更改来达到我的预期?
最佳答案
就像许多“我为什么不能______?”诸如此类的问题,答案是“安全”。对你的问题的简短回答是“不”。文件系统 API 专门设计为 Web 客户端(例如浏览器)的一种方法,以便为开发人员提供类似文件系统的存储结构,仅通过 API 而不是从外部。
API 规范的“4.3 Security Considerations”部分准确地解决了您正在尝试的行为。如果客户端使用实际文件名(例如“FinanceReport.doc”)存储原始文件,那么受感染计算机上的恶意软件将更容易定位和利用通过文件系统 API 存储的敏感数据。此外,如果使用实际的文件名,则它可以使这些文件可执行,例如使用该名称将“EvilActions.exe”存储在本地文件系统上。 (注意:某些客户端,例如 Chrome,甚至不允许您存储可执行文件。)这些是您看到文件和存储混淆的一些原因。事实上,API 没有明确指定客户端应如何存储数据,只是本地存储会引起客户端应解决的安全问题。
我最近完成了 HTML5 的全面安全评估,包括文件系统 API。我向您保证,随着 API 和客户端实现(如果 API 都成熟),您几乎肯定会看到进一步的措施来阻止或至少混淆本地存储的数据(相对于客户端外部的访问)。为了进一步增强本地存储安全性,客户甚至可能会转向将整个内容存储为一个大文件,类似于 MS Access 使用 .mdb
文件进行存储的方式。同样,这完全取决于客户。因为您正在尝试对 API 之外的数据/文件进行某种后门访问,并且以 API 中专门称为“安全问题”的方式执行此操作,所以您今天使用的任何“解决方案”可能会随着客户端安全的成熟,明天就会失败。如果您可以出于合法目的这样做,那么恶意软件作者可以出于恶意目的而这样做,而客户端制造商将尽其所能来阻止这种情况。
关于html - 是否可以轻松地正常(反混淆)访问使用 FileSystem API 编写的沙箱中的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19208984/