2013-10-06 1 views
1

Я использовал файлсистем API для записи нового файла в изолированном хранении Chrome:Можно ли легко получить нормальный (деобфузированный) доступ ко всем файлам в песочнице, написанной с использованием API FileSystem?

подготовки 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 как обычные смонтированных ФС, так что у меня нормальные файлы и каталоги имен. Вместо этого я вижу некоторые обфусканные имена файлов (00000000 вместо ожидаемых log.txt), а не структуру, которую я ожидал.

Как это:

expected picture

Можно открыть изолированного FS как обычные FS, так что я мог бы управлять всеми файлами, как я создаю их в Chrome, используя файлсистем API (я имею в виду структуру и имена файлов), или это невозможно, и он остается запутанным за пределами Chrome?

Есть ли какие-либо трюки, какие-либо изменения флага в Chrome, чтобы получить то, что я ожидал?

ответ

2

Как со многими "Как же я могу не _ __ _ __?" Ответ на вопрос «Безопасность». И короткий ответ на ваш вопрос - «нет». API Файловой Системы был специально разработан как метод для веб-клиентов (например, браузеров), чтобы предоставить разработчикам файловую системную структуру хранения только через API не извне.

Раздел «4.3 Security Considerations» спецификации API относится именно к поведению, которое вы пытаетесь выполнить. Если клиент должен был хранить необработанные файлы с их фактическими именами файлов (например, «FinanceReport.doc»), это значительно облегчило бы вредоносное программное обеспечение на зараженной машине находить и использовать конфиденциальные данные, хранящиеся в API файловой системы. Кроме того, если было использовано фактическое имя файла, он мог бы сделать эти файлы исполняемыми, например, хранить «EvilActions.exe» в локальной файловой системе с этим именем. (Примечание. Некоторые клиенты, такие как Chrome, даже не позволяют хранить исполняемые файлы.) Вот некоторые из причин, по которым вы сталкиваетесь с запутыванием файла и хранилища. Фактически, API явно не указывает , как клиент должен хранить данные, только в этом локальном хранилище возникают проблемы безопасности, с которыми должны обращаться клиенты.

Недавно я завершил полномасштабную оценку безопасности HTML5, включая API файловой системы. Уверяю вас, что, поскольку API и клиентская реализация, если API оба созревают, вы почти наверняка увидите дальнейшие меры по блокированию или по меньшей мере обфускации локально сохраненных данных по сравнению с внешним клиентом. Для дальнейшего укрепления безопасности локального хранилища клиенты могут даже переключиться на сохранение всего этого как одного большого файла, подобно тому, как MS Access использует файл .mdb для хранения. Опять же, это полностью зависит от клиента.Поскольку вы пытаетесь сделать какой-то бэкдор-доступ к данным/файлам, кроме API, и делаете это так, как это определенно называется «проблемой безопасности» в API, вполне вероятно, что любое «решение», которое вы используете сегодня, может не удастся завтра по мере созревания клиентской безопасности. Если вы можете сделать это в законных целях, авторы вредоносных программ могут сделать это в злонамеренных целях, а производители клиентов сделают все возможное, чтобы это предотвратить.

+0

Ваш опыт был интересен для чтения - спасибо Фил. – Jimbo