Добавил Content-Security-Policy к Node.js / Express. js серверному коду, затем удалил его, но Google Chrome по-прежнему блокирует контент - PullRequest
1 голос
/ 16 февраля 2020

УВЕДОМЛЕНИЕ : пересмотренная проблема ниже в разделе РЕДАКТИРОВАНИЯ.

Я изучал Content-Security-Policies в попытке изучить различные концепции безопасности, потому что я строю сайт с нуля. Я понимаю, что это может быть не так уж сложно, так как я не буду получать никакой пользовательской информации, однако я хочу изучить эти концепции и начать применять их, чтобы защитить мой сайт от таких вещей, как Javascript инъекция.

В моем файле server.js я обслуживаю свои страницы с помощью Express в следующем коде:

app.get("/", (req, res) => {
    res.sendFile(path.join(__dirname, "/views/home.html"));
});

Чтобы добавить Content-Security-Policy (CSP) в код моего сервера, я добавил следующий код перед вышеуказанным кодом и перед использованием Express для обслуживания stati c файлов:

//the following code is called right after the creation of the express server

app.use(function(req, res, next) {
    res.setHeader("Content-Security-Policy", "default-src 'self'; script-src 'self' https://apis.google.com");
    return next();
});

//static css/js/img files served here:
app.use('/public', express.static(__dirname + '/public'));

//then the app.get method I defined above

Я перезапустил сервер узлов, открыл up chrome, перешел на http://localhost: 8080 , где я слушаю сайт своего узла, и, как и ожидалось, моя домашняя страница не загружала различные внешние скрипты, CDN и внешние стили, которые у меня есть в мой проект.

Увидев, что CSP работает, я решил удалить всю функцию app.use, которая устанавливает CSP, чтобы я мог создать свой список директив, чтобы я мог добавить CSP позже.

Я удалил этот блок кода, сохранил, перезапустил сервер узлов, и когда я открыл Google Chrome, я все еще получал уведомления на вкладке безопасности в Chrome Инструментах разработки, говоря, что все мои внешний контент блокировался из-за нарушения директив "default-src 'self'" или "script-src 'self'" - опять же, это после Я удалил приведенный выше код CSP из файла моего сервера. Однако, когда я открыл свое приложение в Safari, все загрузилось нормально. Почему Chrome по-прежнему блокирует контент, даже если я удалил код для установки CSP в заголовках HTTP в коде моего сервера?

EDIT: в итоге я сбросил настройки Chrome, которые устранили проблему. Тем не менее, я не уверен, какой параметр установить в go в Chrome сейчас, вместо того, чтобы сбросить все настройки. Также очевидно, что CSP применяется только к домашней странице в этом случае, мне нужно будет установить CSP в методе GET каждой html страницы, да?

...