У меня есть приложение React, размещенное на AWS S3. Чтобы защитить его, я реализовал Lambda @ Edge в соответствии с руководством AWS: https://aws.amazon.com/blogs/networking-and-content-delivery/adding-http-security-headers-using-lambdaedge-and-amazon-cloudfront/
Лямбда Nodejs размещается в Северной Вирджинии:
'use strict';
exports.handler = (event, context, callback) => {
//Get contents of response
const response = event.Records[0].cf.response;
const headers = response.headers;
//Set new headers
headers['strict-transport-security'] = [{key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubdomains; preload'}];
headers['content-security-policy'] = [{key: 'Content-Security-Policy', value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}];
headers['x-content-type-options'] = [{key: 'X-Content-Type-Options', value: 'nosniff'}];
headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}];
headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}];
headers['referrer-policy'] = [{key: 'Referrer-Policy', value: 'same-origin'}];
//Return modified response
callback(null, response);
};
Заголовки HSTS и перенаправление с HTTP на HTTPS отлично работают в Google Chrome и Firefox, но Internet Explorer Edge не перенаправляет. Он загружает страницу через HTTP, а рядом с адресной строкой отображается предупреждение Not Secure.
При просмотре вкладки сети в Internet Explorer отображается заголовок Strict-Transport-Security
в ответе. Все мои исследования показывают, что IE поддерживает HSTS, поэтому я не уверен, почему Edge не перенаправляет на HTTPS, а вместо этого загружает страницу через HTTP. Я хотел бы предотвратить загрузку любого контента через HTTP.
У меня есть действующие сертификаты и домен, и все, что куплено через AWS, все работает, как ожидалось, с Firefox и Chrome, но не с IE.