Я не нашел параметров браузера для обработки потенциально доверенных доменов как ненадежных, НО есть несколько вариантов, чтобы 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