IE Edge не поддерживает Lambda @ Edge HSTS

У меня есть приложение 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.


person react-dev    schedule 28.09.2020    source источник
comment
Здесь ничего не сказано, что объясняет, почему вы ожидаете перенаправления с HTTP на HTTPS.   -  person Michael - sqlbot    schedule 29.09.2020


Ответы (1)


Я создал это в предположении, что CloudFront выполняет свою работу по перенаправлению с HTTP на HTTPS. Комментарий Майкла заставил меня вернуться и проверить, где, по нашему мнению, происходит перенаправление.

Оказывается, у CloudFront было два поведения:

Precedence    Pattern     Origin    Policy
0             *           [URL]     HTTP and HTTPS
1             Default(*)  [URL]     Redirect HTTP to HTTPS

Я предполагаю, что, хотя он установлен по умолчанию и был создан с перенаправлением, AWS / Cloudfront создал приоритет 0, который вступает в силу первым и разрешает HTTP, невозможно изменить порядок приоритета, вы должны изменить поведение 0, чтобы также было Перенаправить HTTP на HTTPS.

После этого HSTS запоминается и используется браузером.

person react-dev    schedule 30.09.2020