Kā ieviest drošas galvenes, izmantojot Cloudflare Workers?

Detalizēts ceļvedis drošu HTTP galveņu ieviešanai vietnēs, kuras nodrošina Cloudflare, izmantojot Cloudflare Workers.

Ir daudzi veidi, kā ieviest HTTP atbildes galvenes, lai aizsargātu vietnes no izplatītām ievainojamībām, piemēram, XSS, Clickjacking, MIMI sniffing, starpvietņu injekcijas un daudz ko citu. Tās plaši pieņemtā prakse un ieteica OWASP.

Iepriekš es rakstīju par galveņu ieviešanu tīmekļa serverī, piemēram, Apache, Nginx un IIS. Tomēr, ja izmantojat Cloudflare, lai aizsargātu un papildinātu savas vietnes, varat izmantot priekšrocības Cloudflare darbinieki lai manipulētu ar HTTP atbildes galvenēm.

Cloudflare Workers ir platforma bez serveriem, kurā varat palaist JavaScript, C, C++, Rust kodu. Tas tiek izvietots katrā Cloudflare datu centrā, kas ir vairāk nekā 200 visā pasaulē.

Īstenošana ir ļoti vienkārša un elastīga. Tas sniedz jums elastību, lai lietotu galvenes visā vietnē, ieskaitot apakšdomēnu vai noteiktu URI ar atbilstošs rakstsn izmantojot Regex.

Šai demonstrācijai es izmantošu kodu autors Skots Helme.

  Kā pievienot komentārus pakalpojumā Google dokumenti

Sāksim…👨‍💻

  • Piesakieties Cloudflare un noklikšķiniet uz Workers (tiešā saite)

  • Kopējiet worker.js kodu no GitHub un ielīmējiet to skriptu redaktorā
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)));

Vēl nesaglabāt; iespējams, vēlēsities pielāgot tālāk norādītās galvenes, lai tās atbilstu prasībām.

Satura drošības politika — ja jums ir jāpiemēro pieteikšanās politika, varat to izdarīt šeit.

Piemēram, ja jums ir nepieciešams iegūt saturu, izmantojot iFrame vairākos URL, varat izmantot kadru priekšteču priekšrocības, kā norādīts tālāk.

"Content-Security-Policy" : "frame-ancestors 'self' gf.dev pcdream.lt.com",

Iepriekš minētais ļaus ielādēt saturu no gf.dev, pcdream.lt.com un pašu vietnes.

  Kā iegūt bezmaksas pārtiku un piegādi vietnē DoorDash

X-Frame-Options — varat mainīt uz SAMEORIGIN, ja plānojat rādīt savas vietnes saturu kādā tās pašas vietnes lapā, izmantojot iframe.

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

Serveris — šeit varat dezinficēt servera galveni. Ielieciet visu, kas jums patīk.

"Server" : "pcdream.lt Server",

RemoveHeaders — vai ir jānoņem dažas galvenes, lai paslēptu versijas, lai mazinātu informācijas noplūdes ievainojamību?

To var izdarīt šeit.

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

Jaunu galveņu pievienošana — ja jums ir nepieciešams nodot dažas pielāgotas galvenes savām lietojumprogrammām, varat tās pievienot sadaļā securityHeaders, kā norādīts tālāk.

let securityHeaders = {
	"Content-Security-Policy" : "frame-ancestors 'self' gf.dev pcdream.lt.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",
}

Kad esat pabeidzis visu nepieciešamo galvenes pielāgošanu, nosauciet darbinieku un noklikšķiniet uz Saglabāt un izvietot.

Lieliski! darbinieks ir gatavs, un pēc tam mums tas jāpievieno vietnei, kurā vēlaties lietot galvenes. Es to izmantošu savā laboratorijas vietnē.

  • Dodieties uz Cloudflare sākumlapu/informācijas paneli un atlasiet vietni.
  • Dodieties uz cilni Darbinieki >> Pievienot maršrutu.
  • Ievadiet URL sadaļā Route; Jūs varat pieteikties Regex šeit.
  • Atlasiet jaunizveidotos darbiniekus un Saglabāt
  8 svarīgi padomi, kā aizsargāt tīmekļa lietojumprogrammu serveri

Tas ir viss; sekundes laikā pamanīsit, ka vietnē ir ieviestas visas galvenes.

Lūk, kā tas izskatās no Chrome Dev Tools. Varat arī pārbaudīt galveni, izmantojot HTTP galvenes rīku.

Es nezinu, kāpēc servera galvene netiek atspoguļota. Es domāju, ka Cloudflare to pārspēj.

Redziet, kopējā ieviešana aizņem ~ 15 minūtes, un nav nepieciešama dīkstāve vai restartēšana, piemēram, Apache vai Nginx. Ja plānojat to lietot ražošanas vietā, es ieteiktu vispirms veikt testēšanu zemākā vidē vai ar maršruta palīdzību, varat pieteikties testa lapās, lai pārbaudītu rezultātus. Kad esat apmierināts, spiediet uz vietu, kur vēlaties.

Tas ir lieliski!

Pateicoties Skots par kodu.