Блокировка смешанного контента из потенциально заслуживающих доверия источников (127.0.0.0/8) - PullRequest
0 голосов
/ 28 февраля 2020

Смешанное содержимое не блокируется для потенциально надежных источников , включая IP-адреса от 127.0.0.0 до 127.255.255.255. Можно ли настроить браузеры на блокировку смешанного контента для таких адресов? Это упростит локальное тестирование.

1 Ответ

1 голос
/ 03 марта 2020

Я не нашел параметров браузера для обработки потенциально доверенных доменов как ненадежных, НО есть несколько вариантов, чтобы 127.0.0.1 и ненадежные домены вели себя одинаково, или для создания отчета об элементах, которые обычно генерировать предупреждение.

XHR

Для XHR достаточно добавить запись в файл hosts (протестировано в Firefox 73.0.1 & Chrome 80.0.3987).

# /etc/hosts
127.0.0.1 example.com

XHR-запросы от https://example.com до http://example.com будут заблокированы правилами Смешанного содержимого. Обратите внимание, что XHR по-прежнему подчиняется CORS и может дополнительно блокироваться политикой CORS.

Это также относится к WebSockets и нескольким другим типам подключения .

<img> и другие не-XHR

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

Есть два варианта, если вы будете sh 127.0.0.1 вести себя так, как если бы это был обычный домен:

  • Полностью блокировать смешанный контент (это может даже помочь в будущем ваш сайт) с использованием политики безопасности контента (CSP)
  • Получите браузер для создания отчета об элементах, которые сгенерировали бы предупреждение

Блокировка смешанного контента

Добавьте эту директиву CSP, чтобы разрешить только изображения HTTPS.

Content-Security-Policy: image-src https:

Используйте default-src вместо image-src, чтобы разрешить только HTTPS для всех других типов подключения. Список других типов соединений и их директив .

Генерация отчета

Добавьте эту директиву CSP, чтобы браузер POST получил отчет JSON о ресурсах, которые будут иметь был заблокирован.

Content-Security-Policy-Report-Only: default-src https:; report-uri /your-endpoint

Вот код Express для этого.

let cspCounter = 1;
const CSP_VIOLATION_REPORT_ENDPOINT = '/csp-violation-report-endpoint';
app.use( (req, res, next) => {
  res.set('Content-Security-Policy-Report-Only', `default-src https:; report-uri ${CSP_VIOLATION_REPORT_ENDPOINT}`);
  next();
});
app.post(CSP_VIOLATION_REPORT_ENDPOINT, (req, res) => {
  const reportFile = `/tmp/csp-report-${cspCounter++}.json`;
  req.pipe(fs.createWriteStream(reportFile));
  req.on('end', () => res.send('ok'));  
  fs.readFile(reportFile, (err, data) => debug('csp-report')(err || JSON.parse(data.toString())) );
});

Доступен тестовый сервер по адресу https://github.com/codebling/mixed-content-test

...