Блокировать скрипты от разрешенных URL - PullRequest
0 голосов
/ 17 мая 2018

1.Резюме

Я не вижу, как я могу заблокировать скрипты из URL-адресов, которые я разрешаю в Content-Security-Policy.


2.Ограничения

У меня статичный сайт.Было бы хорошо, если бы какие-либо решения для JavaScript включали JQuery и / или любые другие библиотеки;Но не решения для динамических сайтов.


3.Цель

Я включаю на свой сайт сторонние кадры, видео, виджеты и т. Д., Которые могут включать в себя аналитические сценарии.Я не хочу, чтобы посетители моего сайта отслеживались.Я хочу заблокировать запросы.

Посетители моего сайта могут установить расширение браузера , которое предотвращает онлайн-отслеживание.Но пользователи без расширений браузера будут отслеживаться.

Я не могу найти, как я могу предотвратить онлайн-отслеживание на моем сайте, если у посетителей сайта нет каких-либо инструментов блокировки.

Подробнее здесь .


4.Пример

Я добавляю потоковое видео в HTML:

<!DOCTYPE html>
<html lang="en">

<head>
    <title>Document</title>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="default-src 'self' https://streamable.com">
</head>

<body>
    <div style="width:100%;height:0px;position:relative;padding-bottom:100.000%;"><iframe src="https://streamable.com/s/aqg9y/uknjqm" frameborder="0" width="100%" height="100%" allowfullscreen style="width:100%;height:100%;position:absolute;left:0px;top:0px;overflow:hidden;"></iframe></div>
</body>

</html>

5.Действия по воспроизведению

Я отключаю все блокировщики рекламы и отслеживания в Firefox для демонстрационной страницы → Я открываю собственную консоль Firefox.


6.Ожидаемое поведение


7.Фактическое поведение


8.Не помогло

  1. Google, поиск переполнения стека
  2. Я пытаюсь прочитать документацию:

  3. НеТрек директива:

1 Ответ

0 голосов
/ 18 мая 2018

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

Таким образом, у вас есть страница верхнего уровня, которая реализует CSP.Затем он загружает другую страницу в iframe.Эта страница может быть загружена как iframe для страницы верхнего уровня, поскольку CSP верхнего уровня позволяет загружать этот домен.

Затем страница iframed загружается полностью отдельно.Он не имеет CSP, поэтому он может загрузить все, в том числе аналитику, которая является ссылкой на эту страницу.

Вы можете получить то, что хотите, с помощью атрибута песочницы iframe. - однако он немного более ограничен: невозможно разрешить некоторые сценарии, а не другие, например.И отслеживание может быть выполнено с изображениями.

Другим вариантом будет прокси стороннего контента через ваш сервер, и вы вставляете CSP в эту страницу iframed, а затем загружаете страницу верхнего уровня на эту измененную страницу.Например:

 <iframe src="https://example.com?pagetoload=streamable.com/s/aqg9y/uknjqm" frameborder="0" width="100%" height="100%" allowfullscreen></iframe>

Это также будет проще с CSP, применяемым через заголовок HTTP, а не с метатегом, поэтому вам даже не нужно изменять HTML-код, возвращаемый страницей с потоком.

Обратите внимание, что наличие полностью открытого прокси-сервера, где может быть загружена любая страница, может привести к множеству других проблем безопасности, включая, но не ограничиваясь:

  • Эта страница теперь существует в этом домене,Что касается этого браузера, то он имеет доступ к файлам cookie этого домена.
  • Я могу отобразить https://example.com? pagetoload = evil.example.com и избежать любой безопасности браузера, которая могла бы иначеblock evil.example.com.

и множество других подобных проблем ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...