Можно ли ограничить неизбирательный доступ к файлу: // через Content Security Policy (CSP) - PullRequest
0 голосов
/ 02 февраля 2019

Я могу ограничить доступ к различным источникам через Content-Security-Policy в html.Но для навигации по file:// кажется, что файлы разрешены в любом месте файловой системы.

Я пытался использовать

<meta http-equiv="Content-Security-Policy" content="default-src 'none'">

Когда я загружаю его с помощью file://path/to/myfile.html и используйте <a href="file:///var/log/system.log">System</a>, я могу щелкнуть и просмотреть содержимое системного журнала.

Мой вопрос: можно ли ограничить загрузку ресурсов или навигацию только подпапками вместо всего в файлесистема для file:// urls?

Я пробовал в Google Chrome Версия 71.0.3578.98 (Official Build) (64-bit) MacOS 10.12.6.

РЕДАКТИРОВАТЬ: приведение ниже реального случая на Apache Cordova 8.1.2:

Создать новый проект, используя cordova create HelloWorld.Затем отредактируйте HelloWorld/www/index.html и добавьте <div><a href="file:///etc/hosts">System</a></div>.

Затем выполните cordova platform add android и cordova run android.Нажмите на ссылку System, и вы сможете просмотреть /etc/hosts, даже если я изменил CSP на <meta http-equiv="Content-Security-Policy" content="default-src 'none'"> (по крайней мере, на моем мобильном телефоне без рута).

1 Ответ

0 голосов
/ 02 февраля 2019

Поскольку у вас нет размещенной вашей страницы, она работает в href , но как только вы ее где-то разместите, фактический URL вашего сайта начнется с http: или https: вместо file: . А затем используйте CSP, он по умолчанию заблокирует файловую систему.

Когда вы открываете локально созданный html, браузер просто читает его как файл.Проверьте параметры разработчика в Chrome и перейдите на вкладку «Сеть», которую вы заметите ниже:

  1. Нет ответа HTTP, поскольку он просто читается как файл и не обслуживается сервером.
  2. Код ответа HTTP отсутствует, вместо этого он будет отображаться как завершенный.
  3. Заголовок ответа HTTP сообщает браузеру, что следует ограничить и разрешить.(CSP в идеале должен отправляться в ответе HTTP и настраиваться на хост-сервере).Тег meta действует как запасной вариант.

Попробуйте разместить свой сайт, а затем, если ваш CSP ограничивает источник, вы увидите код состояния 403 или похожий.

Надеюсь, это прояснит ваши сомнения.

...