Како имплементирати безбедна заглавља користећи Цлоудфларе Воркерс?

Водич корак по корак за имплементацију безбедних ХТТП заглавља на веб локацијама које покреће Цлоудфларе користећи Цлоудфларе Воркерс.

Постоји много начина за имплементацију ХТТП заглавља одговора да бисте заштитили сајтове од уобичајених рањивости, као што су КССС, Цлицкјацкинг, МИМИ сниффинг, убризгавање на више локација и још много тога. Његова широко прихваћена пракса и препоручена од ОВАСП.

Раније сам писао о имплементацији заглавља на веб серверу као што су Апацхе, Нгинк и ИИС. Међутим, ако користите Цлоудфларе да заштитите и напуните своје веб локације, можете то искористити Цлоудфларе Воркерс да манипулишете заглављима ХТТП одговора.

Цлоудфларе Воркерс је платформа без сервера на којој можете покренути ЈаваСцрипт, Ц, Ц++, Руст код. Поставља се на сваки Цлоудфларе центар података, којих има више од 200 широм света.

Имплементација је веома једноставна и флексибилна. Пружа вам флексибилност да примените заглавља на целом сајту, укључујући поддомен или одређени УРИ са одговарајући паттерн користећи Регек.

За ову демонстрацију, користићу код од Сцотт Хелме.

Хајде да почнемо…👨‍💻

  • Копирајте воркер.јс код из ГитХуб и налепите у уређивач скрипти
const securityHeaders = {
        "Content-Security-Policy": "upgrade-insecure-requests",
        "Strict-Transport-Security": "max-age=1000",
        "X-Xss-Protection": "1; mode=block",
        "X-Frame-Options": "DENY",
        "X-Content-Type-Options": "nosniff",
        "Referrer-Policy": "strict-origin-when-cross-origin"
    },
    sanitiseHeaders = {
        Server: ""
    },
    removeHeaders = [
        "Public-Key-Pins",
        "X-Powered-By",
        "X-AspNet-Version"
    ];

async function addHeaders(req) {
    const response = await fetch(req),
        newHeaders = new Headers(response.headers),
        setHeaders = Object.assign({}, securityHeaders, sanitiseHeaders);

    if (newHeaders.has("Content-Type") && !newHeaders.get("Content-Type").includes("text/html")) {
        return new Response(response.body, {
            status: response.status,
            statusText: response.statusText,
            headers: newHeaders
        });
    }

    Object.keys(setHeaders).forEach(name => newHeaders.set(name, setHeaders[name]));

    removeHeaders.forEach(name => newHeaders.delete(name));

    return new Response(response.body, {
        status: response.status,
        statusText: response.statusText,
        headers: newHeaders
    });
}

addEventListener("fetch", event => event.respondWith(addHeaders(event.request)));

Не чувајте још; можда ћете желети да прилагодите следећа заглавља како би испунили захтев.

  БТФО Значење: Шта значи БТФО?

Цонтент-Сецурити-Полици – ако треба да примените своју политику апликације, можете то учинити овде.

На пример – ако треба да добијете садржај преко иФраме-а на више УРЛ-ова, онда можете да искористите предности оквира-преци као у наставку.

"Content-Security-Policy" : "frame-ancestors 'self' gf.dev techblog.co.rs.com",

Горе наведено ће омогућити учитавање садржаја са гф.дев, вдзвдз.цом и селф сите-а.

Кс-Фраме-Оптионс – можете променити на САМЕОРИГИН ако намеравате да прикажете садржај вашег сајта на некој страници у оквиру истог сајта користећи ифраме.

"X-Frame-Options": "SAMEORIGIN",

Сервер – овде можете дезинфиковати заглавље сервера. Ставите шта год желите.

"Server" : "techblog.co.rs Server",

РемовеХеадерс – да ли треба да уклоните нека заглавља да бисте сакрили верзије да бисте ублажили рањивост на цурење информација?

Можете то урадити овде.

let removeHeaders = [
	"Public-Key-Pins",
	"X-Powered-By",
	"X-AspNet-Version",
]

Додавање нових заглавља – ако треба да проследите нека прилагођена заглавља вашим апликацијама, можете их додати у одељку сецуритиХеадерс као у наставку.

let securityHeaders = {
	"Content-Security-Policy" : "frame-ancestors 'self' gf.dev techblog.co.rs.com",
	"Strict-Transport-Security" : "max-age=1000",
	"X-Xss-Protection" : "1; mode=block",
	"X-Frame-Options" : "SAMEORIGIN",
	"X-Content-Type-Options" : "nosniff",
	"Referrer-Policy" : "strict-origin-when-cross-origin",
        "Custom-Header"  : "Success",
}

Када завршите са прилагођавањем свих заглавља која су вам потребна, именујте радника и кликните на Сачувај и примени.

Велики! радник је спреман, а затим треба да додамо ово на сајт где желите да примените заглавља. Применићу ово на своју лабораторију.

  • Идите на Цлоудфларе почетну/контролну таблу и изаберите локацију.
  • Идите на картицу Радници >> Додај руту.
  • Унесите УРЛ у Роуте; можете применити Регек овде.
  • Изаберите новостворене раднике и сачувајте

То је све; у року од секунде, приметићете да су сва заглавља имплементирана на сајт.

Ево како то изгледа из Цхроме Дев Тоолс-а. Такође можете тестирати заглавље помоћу алата за ХТТП заглавље.

  Како поправити ПУБГ заостајање након инсталације

Не знам зашто се не приказује заглавље сервера. Претпостављам да Цлоудфларе превазилази ово.

Видите, целокупна имплементација траје ~15 минута и није потребно време застоја или поновно покретање као Апацхе или Нгинк. Ако планирате да ово примените на производном месту, предлажем да прво тестирате на нижем окружењу, или уз помоћ руте, можете да примените на страницама за тестирање да бисте проверили резултате. Када будете задовољни, гурајте где год желите.

Ово је супер!

Захваљујући Сцотт за код.