Security headers instellen voor je website

Afgelopen week was ik bezig met het migreren van een aantal persoonlijke websites van shared hosting naar Linode. Na het overzetten van alle databases en bestanden stond er nog een klein puntje op mijn actielijst: alle HTTP security headers eens nakijken en (waar mogelijk) goed instellen.

Omdat het niet iets is wat ik dagelijks doe even een samenvatting. For future reference. ;)

Wat zijn HTTP headers?

Security headers score roelioAls jij een webpagina bezoekt wisselt de server waarop die website gehost informatie met jouw browser. Onder andere over hoe je browser moet omgaan met a) de verbinding naar die website en b) de inhoud van de webpagina. Een aantal van die headers kun je inzetten om je website beter te beveiligen, de zogenaamde security headers.

Om snel te checken hoe jouw website er nu voor staat kun je deze scannen met securityheaders.com. Mijn website begon met een F en scoort nu een A (goed), maar er zijn nog verbeterpunten.

Belangrijke security headers

Er zijn een aantal HTTP security headers beschikbaar om bepaald gebruik van je website te controleren of te beperken. Allemaal gericht op het beperken van risico’s voor bezoekers. Bijvoorbeeld:

  • Strict-Transport-Security: hiermee kun je afdwingen dat browsers jouw website alleen via HTTPS inladen. Altijd aanbevolen als je al een SSL-certificaat hebt geinstalleerd.
  • X-Frame-Options: om te voorkomen dat je website via een iframe in een andere website wordt ingeladen kun X-Frame-Options instellen. Bijna altijd aan te raden, behalve als je wil toestaan dat inhoud op andere websites 'ingesloten' wordt.
  • X-Content-Type-Options: stelt vast dat browsers scripts en stylesheets niet mogen laden als de server niet het correcte MIME type meegeeft. Gericht op het tegengaan van XSS.
  • Referrer-Policy: deze bepaalt welke informatie via de HTTP Referer header wordt meegegeven. Je kunt kiezen uit de complete URL van herkomst, alleen de domeinnaam van herkomst, maar je kunt ook kiezen alleen een referrer mee te geven naar andere pagina's binnen je eigen site.
  • Permissions-Policy: via browser features en API's kunnen webpagina's toegang vragen tot je camera, microfoon, locatie, etc. Met een Permissions-Policy stel je beperkingen in welke web features je site mag gebruiken. En die gelden dan ook voor embeds!
  • Content-Security-Policy: met een CSP stel je heel precies in welke bronnen vanaf welke domeinen mogen worden geladen. En of inline javascript (XSS risico) geladen mag worden. Op de infosec-website van Mozilla vind je meerdere voorbeelden van Content Security Policies.

Security headers instellen

HTTP Security Headers kun je instellen via server-configuratiebestanden, maar ook via plugins/modules van jouw CMS. De eerste optie vond ik het makkelijkst. Zoals altijd: maak even een back-up van de configuratie-bestanden voordat je iets wijzigt.

Op Nginx is dit mijn aanbevolen configuratie (in /etc/nginx/sites-available/sitenaam.conf) :

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;

 

Gebruik je Apache, dan kun je dit toevoegen aan je .htaccess file:

# HTTP security headers

Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"

In deze aanbevolen configuraties mis je nog Content-Security-Policy, Referrer-Policy en Permissions-Policy. Hiervoor zul je je wel even iets moeten inlezen. De configuratie hiervan hangt af van de opzet van je site. Gebruik je daar 3rd party scripts (analytics) of stylesheets (web fonts)? En hoe belangrijk vind je het dat een referrer wordt meegegeven via kliks vanaf jouw website?

Maar als je voor jezelf die vragen hebt beantwoord ben je klaar. Toch? Nou nee, er zijn alweer nieuwe security headers in aantocht. En ook andere aspecten kun je waarschijnlijk verder aanscherpen (zoals DNSSEC). Met bijvoorbeeld Mozilla’s Observatory en Internet.nl kun je uitgebreider scannen hoe veilig jouw site geconfigureerd is. Bij de eerste scoort roel.io slechts een F 😞, bij de tweede pas 70 van maximaal 100 punten. Werk aan de winkel dus!

Verder lezen?

Attack Surface - Cory Doctorow

Attack surface cory doctorow

TL;DR - Aanrader!👍

Attack Surface van Cory Doctorow is een cyberpunk-boek met veel actie dat lekker wegleest, en hoop geeft! Het speelt zich af in een versie van onze wereld waar de mogelijkheden van (internet)technologie zijn gedramatiseerd. De verhaallijn sluit aan op twee eerdere boeken (Little Brother en Homeland), maar je kunt het prima los lezen. Dat deed ik ook.

Verhaal

In reactie op terrorisme is het surveillance-industriële complex wereldwijd een (nog) belangrijker bedrijfstak geworden. Daar verdient hoofdpersoon Masha goed geld, maar met gewetensbezwaren. Want ze weet precies wat voor effect haar werk heeft op de mensen die zij in de gaten houdt.

Het verhaal begint in een fictieve Oost-Europese republiek waar Masha overdag namens het regime de oppositie monitort. ’s Avonds zoekt ze die idealistische actievoerders juist op om ze te leren zich beter te wapenen tegen surveillance-technologie.

Via flashbacks leren we stap-voor-stap hoe Masha in de wereld van de surveillance terecht is gekomen, en welke keuzes ze daarbij heeft gemaakt.

Technologie (niet) uitgelegd

In het boek gebruikt Doctorow aardig wat tech-termen. Maar deze legt hij niet uit. Zoals Ton in zijn recensie aanhaalde is dat om je te stimuleren daar zelf naar op zoek te gaan. Één fan heeft dit al gedaan, en verzameld in de Mashapedia. Zodat je snel kan opzoeken wat een ‘IMSI-catcher’ of een ‘dazzle mask’ zijn.

Morele dilemma's

Nadat het misloopt in Oost-Europa gaat Masha terug naar de VS om een vriendin te helpen. Een vriendin die juist opkomt tegen de bijna autoritaire combinatie van overheid en surveillance-industrie.

Waar de eerdere twee boeken idealistisch young-adult waren, richt Doctorow zich met Attack Surface op volwassenen. In Wired legt hij uit waarom:

“The thing adults do is confront their moral legacy. They look back on what they've done and they think about their regrets,” Doctorow says. “The ongoing process of being an adult is having been corralled into compromises and then making sense of those compromises for yourself.”

Dat is de rode draad in het boek. Als white hat hacker (ingehuurd) binnen het overheidsapparaat heeft Masha veel foute keuzes gemaakt. Wanneer ze die onder ogen begint te zien, kan ze ook nauwlijks richting zichzelf verantwoorden.

Sterk is hoe het boek je meeneemt in haar gedachtengang dat technologie allesbepalend is, en dat je je als burger-onder-surveillance niet aan die technologie kunt onttrekkken. Techno-utopisme, zoals Silicon Valley graag predikt, met een cynische ondertoon. Want je kunt er niet aan ontsnappen.

Als realistische techno-optimist maakt Doctorow daar tegen het einde van het boek een punt over.

"Technology is a tool that gives us the space to make political change. Politics are a tool we use to open the space for making better technology."

En dat geeft niet alleen Masha hoop. Mij ook.

Shoshana Zuboff:

"We can have democracy, or we can have a surveillance society, but we cannot have both.”

Prachtige (ook mooi ontworpen) rant van Robin Rendle: Newsletters; or, an enormous rant about writing on the web that doesn’t really go anywhere and that’s okay with me.

En hij heeft gelijk:

  • Het web is nog steeds te moeilijk.
  • Reeder is ook mijn favoriete web browser.
  • En het is logisch dat nieuwsbrieven de laatste jaren zo populair zijn geworden. 

Wat kunnen we daarmee?

Omdat genieten van de goede dingen des levens nu vooral binnenshuis moet gebeuren proberen we speciale bieren met bijzondere smaken. Zoals een breckenridge barrel-aged Heaven & Hell van brouwerij De Molen. Proost! 😋🍺 

Donker bier in een glas, met ernaast een fles Heaven & Hell van brouwerij de Molen

Het uitzicht tijdens mijn rondje hardlopen 🏃‍♂️vanochtend.

Strand bij Nieuwvliet (drone video)

Zeeuwse strand vanuit de lucht (drone)

Paarden en yoga op het Zeeuwse strand (drone)

Lines in the sand

Drone foto van golven op het strand door Roel Groeneveld

Cadzand in de verte (drone)

Strand richting Cadzand uit de lucht gefotografeerd

Stormbreker

Meeuwen op een rij op de palen van een stormbreker

Peenplant

Wilde peenplant bij zonsondergang

Nederrijn

Wat is GPT-3 eigenlijk?

Misschien heb je op Twitter de hashtag #gpt3 voorbij zien komen? Dan was je vlakbij kunstmatige intelligentie. 😉

GPT-3 staat namelijk voor Generative Pretrained Transformer versie 3 (wikipedia). Kort door de bocht is dat een taalmodel dat ontstaan is door patronen te zoeken in grote hoeveelheden informatie. In dit geval enorme hoeveelheden informatie! Met wat het daar geleerd heeft kan GPT-3 zelf uitgebreid en aardig coherent antwoorden genereren op vragen die je stelt.

Wat is een taalmodel?

Wij denken er nooit over na, maar we hebben allemaal een eigen taalmodel. Dat helpt ons sneller te lezen of luisteren. Op basis daarvan vullen we letters en woorden al in voordat we ze lezen:

Als je bijvoorbeeld al de letters carnava.. voor je ziet, weet je dat je op de puntjes waarschijnlijk een l kunt verwachten. En na het lezen van br… verwacht je hoogstwaarschijnlijk geen k. Niet alleen op letter-niveau, maar ook op woordniveau is de afloop soms goed te voorspellen. Na ‘met terugwerkende …’ verwacht je ‘kracht’ en na ‘het is veel te …’ volgt waarschijnlijk een bijvoeglijk naamwoord (bv ‘heet’ of ‘kort’) en geen zelfstandig naamwoord (bv ‘fiets’ of ‘brood’).

GPT-3 doet ongeveer hetzelfde, maar omdat het model getraind is op zoveel informatie kan het uitgebreider en beter teksten ‘schrijven’ dan eerdere generatieve taalmodellen (zoals voorganger GPT-2).

Hoe het dat geleerd heeft legt Jay Alammar in een korte animatie uit: GPT-3 is getraind op 300 miljard tekens tekst, met als doel om woorden te kunnen voorspellen.

Alles uit de gigantische dataset waaraan het model is blootgesteld is omgezet in 175 miljard parameters. Die gebruikt GPT-3 als je het iets vraagt (input), en op basis daarvan genereert het zelf een antwoord.

Wat kan GPT-3?

Eigenlijk kan GPT-3 gewoon schrijven. Alleen dan schrijven in de breedste zin van het woord, van gedichten tot programmeercode. En veel beter dan eerdere AI-taalmodellen.

In de afgelopen weken is met GPT-3:

En veel meer.

En als je puur kijkt naar de kwaliteit van de teksten die GPT-3 ‘schrijft’? Gwern Bransen is onder de indruk:

GPT-3’s samples are not just close to human level: they are creative, witty, deep, meta, and often beautiful. They demonstrate an ability to handle abstractions, like style parodies, I have not seen in GPT-2 at all. Chatting with GPT-3 feels uncannily like chatting with a human.

Wat betekent GPT-3?

In de New York Times is Farhad Manjoo erg overtuigd:

Software like GPT-3 could be enormously useful. Machines that can understand and respond to humans in our own language could create more helpful digital assistants, more realistic video game characters, or virtual teachers personalized to every student’s learning style. Instead of writing code, one day you might create software just by telling machines what to do.

Meer praktisch ziet Max Woolf, in vergelijking met GPT-2, twee grote verbeteringen in GPT-3:

  1. it allows generation of text twice the length of GPT-2 (about 10 paragraphs of English text total), and
  2. the prompts to the model better steer the generation of the text toward the desired domain (due to few-shot learning). For example, if you prompt the model with an example of React code, and then tell it to generate more React code, you’ll get much better results than if you gave it the simple prompt. Kortom: het GPT-3-taalmodel kan veel langere teksten genereren en beter gestuurd worden met uitgebreidere input.

Maar in de online voorbeelden is GPT-3 ook langzaam. En zijn menselijke vooroordelen die overal op internet te vinden zijn ook in het model aanwezig.

Het is mooi, maar nog zeker geen magie.

Zonnebloem

Zonnebloem met blauwe lucht op de achtergrond

Die Broken Earth trilogie van N.K. Jemisin, wauw!

Jen Taylor: zo lanceer je een product in 5 stappen

Vandaag pikte ik wat flarden op van de Sprint Couch Conference, georganiseerd door het team achter The Next Web. Het thema was ‘Digital product strategy in 2020’, met veel verschillende presentaties. Eerlijk gezegd had ik alleen tijd om het verhaal van Jen Taylor (Hoofd Product bij Cloudflare) met aandacht te volgeen. Daarin ging zij in op hoe bij Cloudflare producten worden gelanceerd.

Voorbereiding

Al heel vroeg in de productontwikkel-cyclus wordt gestart met de eerste stap richting lancering. Door de product manager wordt tijdens het uitwerken van de requirements een blogartikel over het nieuwe product of feature geschreven. Vergelijkbaar met hoe bij Amazon altijd eerst een intern persbericht wordt geschreven bij de start van een nieuw productontwikkel-traject (“Working backwards”, noemen ze dat).

IMG 0180 (Slide uit Jen Taylor's presentatie.)

In die fase wordt ook bepaald wat voor type lancering nodig is:

  1. Een 'Big Bang', voor een nieuw product met duidelijke product-markt-fit, waar veel aandacht voor gegenereerd moet worden (inclusief groter budget voor product marketing) zodat een positie in de markt veroverd kan worden.
  2. Een 'Slow Launch', gericht op een kleinere groep gebruikers waarbij je vooral wil leren van de gebruiker, koper en over welk prijsmodel geschikt is. Data over gebruik en 'word of mouth' zijn essentieel.

Daarbij moet je meenemen hoe je wil lanceren;

  • Creëer je een moment, door je publiek puur voor de lancering te bereiken. Headline-waardig dus.
  • Of haak je aan bij een bestaand moment, bijvoorbeeld een evenement waar jouw gebruikers al aanwezig zijn.

Is dat duidelijk, dan kun je aan de daadwerkelijke lancering gaan werken.

Productlancering

Producten lanceren draait bij Cloudflare gelukkig ook om het succesvol maken van gebruikers. En dat doen ze in 5 stappen:

IMG 0184
  1. Drive Awareness - Vanuit een duidelijke positionering zet je je website, blog, sociale media, eventueel user advocates of advertenties in om je publiek bewust te maken van het nieuwe product of de nieuwe features. Zodat geïnteresseerden leren dat er een nieuwe oplossing is voor hun probleem of 'job'.
  2. Take action - Stel gebruikers in staat om de nieuwe features of het nieuwe product uit te proberen. Kunnen ze een account aanmaken en inloggen? En als ze dan de nieuwe functionaliteit uitproberen is de meerwaarde direct duidelijk?
  3. Get successful - Zorg ervoor dat gebruikers succesvol aan de slag kunnen met die nieuwe mogelijkheden, door documentatie en how to's aan te bieden en video demo's te organiseren.
  4. Stay successful - Biedt goede support aan, met o.a. een gebruiksvriendelijk ticketsysteem, community forums en/of Slack kanalen, bemand door een sterk support team dat voldoende ondersteuning krijgt vanuit de organisatie (kennis, middelen).
  5. Grow - gebruik blogs, white-papers, nieuwsbrieven en e-mail journeys om de mogelijkheden verder onder de aandacht te brengen.

And repeat

In het verlengde van die 5 stappen ga je meten, leren, en vervolgens aanpassingen doorvoeren om je gebruikers succesvoller te maken.

IMG 0193

En daarna begin je aan het volgende product of de volgende nieuwe feature. Net zo makkelijk.

Ongeveer hetzelfde verhaal vertelde ze vorig jaar bij SaaStr, daarvan kun je de video hieronder terugzien:

Flamingo

Nek en kop van een flamingo in een sierlijke vorm op een donkere achtergrond

Wat doe jij met je favoriete digitale foto’s?

Op mijn telefoon staan bijna 25.000 (!) foto’s en video’s. Af en toe realiseer ik me weer hoeveel dat er zijn. En vraag me dan af: wat moet ik ermee?

De leukste foto’s van onze kinderen deel ik digitaal met m’n vriendin en opa’s en oma’s. Maar die bekijken we nog steeds maar één of twee keer. Vluchtig. En dat is zonde. Patrick Rhone is er heel duidelijk over: je favoriete foto’s moet je uitprinten. Zijn tip: neem daar iedere paar maanden even de tijd voor.

Veel problemen waar we in onze maatschappij tegenaan lopen hebben te maken met de nadruk op efficiëntie. Wat leidt tot gebrek aan speling in onze systemen. De ‘nippertjeseconomie’, noemt Karin Spaink het. Ton legt uit wat dat betekent:

Hier wat afschaven, daar een bochtje afsnijden, voorraden minimaliseren en alles just-in-time. Op het nippertje gaat alles goed. Meestal.

Maar soms niet.

In complexiteitsdenken betekent een ver doorgevoerde efficiëntie wel het afbreken van veerkracht en wendbaarheid. Dat is niet zo erg voor heel voorspelbare zaken (als A dan altijd B), maar wel als complexe vragen zich aandienen.

Ik spreek dan vaak over de broosheid van systemen. Broos omdat ze geoptimaliseerd zijn voor een hele smalle groep situaties, een heel specifieke niche. Broos omdat ze het niet meer aan kunnen, of erger nog, volledig in de weg zitten zodra er iets buiten dat spectrum gebeurt.

Dan kieper je ineens van voorspelbaarheid in de chaos: heb je net in een paar jaar tijd de IC bedden in Nederland met zo’n duizend verlaagd (in 2017 hadden we er nog zo’n 2100, dit voorjaar net over de 1000) want dat is efficiënter, gebeurt er iets wat meer van je verlangt en wordt de zorg zo overbelast dat alleen drastische maatregelen het nog enigszins kunnen inperken.