Gå til innholdet

Cookie-innstillinger

Velg hvilke typer cookies du tillater. Du kan når som helst endre valget via Cookie-innstillinger nederst på hver side. Personvernerklæring

Nødvendige

Alltid på

Trengs for å logge inn, beholde handlekurven og huske valgene dine. Disse er alltid på.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: økten din og at du forblir innlogget
  • weboke_basket: handlekurven din
  • wkBtwIncl: visning av priser med eller uten mva.
  • wok_cookies: cookievalget ditt, 12 måneder

Måler hvilken annonse som fører til et besøk eller en bestilling, slik at vi ikke betaler for annonser som ikke gir noe.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), opptil 90 dager
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: hvilken partner som henviste deg til oss (partnerprogram), 60 dager

4,6

Land og språk

Hvert land har sin egen nettside, med priser og mva. for det landet.

Vis

Herde nettstedet: rettigheter, headere og sikkerhetsutvidelser

Modul 7: Sikkerhet · Lesetid: 10 minutter

Læringsmål: Etter denne leksjonen kan du herde et WordPress-nettsted med rettigheter, innstillinger og sikkerhetsheadere, og vurdere sikkerhetsutvidelser på deres faktiske verdi.

Nøkkelbegreper: herding (hardening), filrettigheter (644, 755), DISALLOW_FILE_EDIT, ingen PHP i uploads, mappeliste, skjule versjon, X-Powered-By, sikkerhetsheadere, sikkerhetskopifiler og .git i webmappen, WAF på serveren, WAF i en utvidelse, skadevarescanner

Hva herding er

Herding betyr: å stille inn nettstedet slik at en feil eller et sikkerhetshull gjør mindre skade. Det erstatter ikke oppdateringer og sterke passord (leksjon 7.2 og 7.3), men gjør konsekvensene mindre. Tenk på et hus: oppdateringer er låsene, herding er å sørge for at en innbruddstyv som likevel kommer inn, ikke kommer til safen.

Filrettigheter

Hver fil og mappe på serveren har rettigheter: hvem som får lese, skrive og kjøre. De skrives som tre siffer, for eieren, gruppen og resten av verden. Retningslinjen fra WordPress-dokumentasjonen:

HvaRettigheterBetydning
Mapper755Eieren får gjøre alt, andre får lese og åpne
Filer644Eieren får lese og skrive, andre bare lese
wp-config.phpstrengere, for eksempel 600 eller 640Kun eieren (og eventuelt webservergruppen) får lese

Hvilken verdi som fungerer for wp-config.php, avhenger av hvordan webhotellet ditt kjører PHP: hos de fleste delte webhotell kjører PHP som din egen bruker, og da er 600 nok. Prøv det og se om nettstedet fortsatt fungerer.

Aldri 777. Det betyr: alle på serveren får skrive. En veiledning som sier «sett mappen til 777 hvis opplastingen ikke fungerer», løser problemet på feil måte. Hos et godt webhotell er det heller aldri nødvendig.

Innstillinger i wp-config.php

Noen linjer som utgjør stor forskjell (over «stopp redigering»):

// Ingen filredigering fra administrasjonen (Utseende > Temaredigering og Utvidelser > Utvidelsesredigering).
define( 'DISALLOW_FILE_EDIT', true );

// Feilmeldinger skal aldri vises på skjermen til besøkende (leksjon 5.4).
define( 'WP_DEBUG', false );

Med DISALLOW_FILE_EDIT forsvinner redigeringsverktøyet du ellers kunne brukt i administrasjonen til å endre PHP-filer i temaer og utvidelser. En innbruddstyv som overtar en administratorkonto, kan da ikke legge ondsinnet kode i temaet ditt med to klikk. Du kan fortsatt installere utvidelser; vil du forby også det (for eksempel på et nettsted du administrerer for en kunde), finnes DISALLOW_FILE_MODS, men da slutter også oppdateringer via administrasjonen å fungere.

Ingen PHP i uploads, ingen mappeliste

I wp-content/uploads hører bilder og dokumenter hjemme, aldri PHP-filer. Innbruddstyver som får lastet opp en fil gjennom et sikkerhetshull, prøver nettopp å legge inn en PHP-fil og så hente den. Blokker dette med en .htaccess i uploads-mappen (for LiteSpeed og Apache):

<Files *.php>
Require all denied
</Files>

Skru også av visning av mappeinnhold. Uten index.php eller index.html i en mappe viser noen webservere en liste over alle filene («Index of /wp-content/uploads/2026/11»). Det er et utstillingsvindu for alle som leter etter sikkerhetskopier eller sensitive dokumenter. I .htaccess-filen i webmappen din:

Options -Indexes

Mange webhotell har dette allerede skrudd av som standard. Oppgaven i denne leksjonen kontrollerer det.

Ingen rester i webmappen

Alt i webmappen kan hentes via nettet, bortsett fra det serveren kjører som PHP eller blokkerer. Farlige eksempler er:

  • kopier av wp-config.php (wp-config.php.bak, wp-config.old, wp-config.php~ fra en tekstredigerer): disse inneholder databasepassordet ditt og sendes ut som ren tekst (leksjon 1.3);
  • sikkerhetskopier som backup.zip, site.tar.gz eller database.sql i webmappen;
  • en .git-mappe fra en utvikler, som gjør at noen kan laste ned hele koden din (og noen ganger passord);
  • debug.log i wp-content (leksjon 5.4);
  • gamle installasjons- eller testfiler som info.php med phpinfo().

Oppbevar sikkerhetskopier utenfor webmappen eller utenfor serveren, og rydd opp rester.

Skjule versjon: liten gevinst

WordPress legger som standard dette i HTML-koden:

<meta name="generator" content="WordPress 7.1.4" />

og det samme i RSS-feeden. Også PHP melder seg noen ganger i en header: X-Powered-By: PHP/8.3.14. Å skjule dette er fornuftig, men forvent ikke for mye av det: programmene til innbruddstyver prøver et sikkerhetshull uansett, uavhengig av versjonen du viser, og versjoner kan ofte også leses ut av ?ver= bak skript. Å skjule er opprydding, ikke sikkerhet. Et nettsted som skjuler versjonen sin men ikke oppdaterer, er like sårbart.

Slik gjør du det, i en egen liten utvidelse eller i functions.php til undertemaet ditt (child theme):

remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );

Og PHP-headeren med expose_php = Off i PHP-innstillingene hos webhotellet ditt (i DirectAdmin under Select PHP version, Options), eller med Header unset X-Powered-By i .htaccess.

Sikkerhetsheadere

Med noen få headere forteller du nettleseren hvordan den skal forholde seg til nettstedet ditt. De viktigste:

HeaderHva den gjør
Strict-Transport-SecurityKun via https (leksjon 3.1)
X-Content-Type-Options: nosniffNettleseren gjetter ikke selv hva slags filtype noe er; forhindrer at et opplastet «bilde» kjøres som skript
X-Frame-Options: SAMEORIGIN eller Content-Security-Policy: frame-ancestors 'self'Andre nettsteder får ikke vise ditt nettsted i en ramme; forhindrer clickjacking (en usynlig knapp fra ditt nettsted skjult under en annens)
Referrer-Policy: strict-origin-when-cross-originVed klikk til et annet nettsted sendes bare domenenavnet ditt med, ikke hele adressen
Permissions-PolicySkrur av nettleserfunksjoner som nettstedet ditt ikke bruker (kamera, mikrofon, posisjon)
Content-Security-PolicyBestemmer nøyaktig hvilke kilder skript og stiler får komme fra. Kraftig, men vanskelig å få riktig med WordPress og utvidelser; begynn med modusen Report-Only

I .htaccess (for LiteSpeed og Apache):

<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>

Test etterpå om alt fungerer: innebygd innhold, betalingsknapper, en chat-widget. Eksterne verktøy som securityheaders.com og internet.nl viser hva nettstedet ditt sender.

Sikkerhetsutvidelser, ærlig vurdert

Det finnes mange sikkerhetsutvidelser (for eksempel Wordfence, Solid Security, All-In-One Security, Sucuri). De pakker ofte sammen: en brannmur, en skadevarescanner, innloggingsbeskyttelse, tofaktorautentisering, varsler og en herdeliste. Nyttig, men med begrensninger:

  • En brannmur i en utvidelse (WAF) starter først når PHP kjører. En ondsinnet forespørsel må først gjennom webserveren og PHP før utvidelsen ser den. Et sikkerhetshull i en PHP-fil som kalles direkte, eller et angrep som belaster PHP tungt i seg selv, stopper den ikke alltid. En brannmur på serveren (for eksempel ModSecurity, Imunify360 eller en brannmur fra webhotellet ditt) sitter tidligere i kjeden og stopper mer, uten at din egen pakke gjør regnearbeidet. Spør webhotellet ditt hva som kjører på serveren.
  • En scanner finner i etterkant. En skadevarescanner forteller deg at noe er galt. Det er verdifullt, men det forhindrer ingenting. Og en scanner på samme server som et hacket nettsted kan selv ha blitt endret av innbruddstyven.
  • De erstatter ikke oppdateringer. En utvidelse med et kjent sikkerhetshull forblir sårbar, selv med en sikkerhetsutvidelse ved siden av. Noen sikkerhetstjenester tilbyr «virtuelle patcher» som stopper kjente angrep til du har oppdatert; nyttig som overgang, ikke som erstatning.
  • De er selv en utvidelse. Mer kode, mer å oppdatere, noen ganger selv et sikkerhetshull. Og to sikkerhetsutvidelser samtidig kolliderer ofte.
  • De koster regnekraft, spesielt scannere som kjører på din egen server.

Et fornuftig valg: se først hva webhotellet ditt allerede gjør (brannmur, skadevarescanning, blokkering av innloggingsforsøk). Fyll på det som mangler, som oftest tofaktorautentisering og begrensning av innloggingsforsøk. En omfattende sikkerhetsutvidelse er mest nyttig ved webhotell som selv gjør lite.

Oppsummering

  • Herding begrenser skaden av en feil eller et sikkerhetshull; det erstatter ikke oppdateringer og passord.
  • Mapper 755, filer 644, wp-config.php strengere; aldri 777.
  • Skru på DISALLOW_FILE_EDIT, blokker PHP i uploads, skru av mappelister og rydd bort sikkerhetskopier, .git og debug.log fra webmappen.
  • Å skjule versjonen er opprydding, ikke sikkerhet; sikkerhetsheadere hjelper nettleseren med å beskytte de besøkende dine.
  • En brannmur på serveren stopper mer enn en utvidelse; sikkerhetsutvidelser er et supplement, ikke en erstatning.

Quiz

1. En veiledning sier: «sett wp-content til 777 hvis opplasting ikke fungerer.» Hva synes du om det?



2. Hva gjør DISALLOW_FILE_EDIT?



3. Hvorfor sitter en brannmur på serveren tidligere i kjeden enn en brannmur i en utvidelse?



4. Du har fjernet generator-taggen. Er nettstedet ditt nå trygt mot sikkerhetshull i gamle versjoner?



5. Hvilken header forhindrer at et annet nettsted laster ditt nettsted i en usynlig ramme?



Oppgave

Oppgave A7.4: Hva viser nettstedet ditt til alle? Fyll inn adressen til nettstedet ditt. Programmet leser forsiden og RSS-feeden (/feed/) og kontrollerer: at det ikke står noen WordPress-versjon i generator-taggen i HTML-koden og feeden, at headeren X-Powered-By ikke viser noen PHP-versjon, og at nettstedet ditt sender X-Content-Type-Options: nosniff, en beskyttelse mot rammer (X-Frame-Options eller frame-ancestors) og en Referrer-Policy? HSTS (leksjon 3.1) og Permissions-Policy kan mangle (oransje).

Oppgave A7.4: Hva viser nettstedet ditt til alle?


Det du fyller inn, og det vi finner, lagrer vi ikke. Nettleseren din husker svarene dine og om du har bestått oppgaven. Er du logget inn, lagrer vi kun at du har (nesten) bestått oppgaven i Mine kurs; der kan du også slette det.

Oppgave A7.4b: Ingen rester i webmappen. Bevis at det er ditt eget nettsted (TXT-record eller fil med koden fra oppgaven). Programmet ber deretter om en kort, fast liste: mappen /wp-content/uploads/ (ingen mappeliste), /.git/HEAD, /wp-content/debug.log og noen vanlige navn på kopier av wp-config.php. Godt er om ingen av dem gir tilbake innhold (404 eller 403). Programmet prøver ikke noe annet og endrer ingenting.

Oppgave A7.4b: Ingen rester i webmappen

Denne kontrollen henter opp stier som du bare lar kontrollere på ditt eget nettsted. Klikk først på «Vis koden min» og legg den koden som en TXT-record på _weboke-cursus.<ditt domene> eller som en fil på nettstedet ditt (se forklaringen ved koden).


Det du fyller inn, og det vi finner, lagrer vi ikke. Nettleseren din husker svarene dine og om du har bestått oppgaven. Er du logget inn, lagrer vi kun at du har (nesten) bestått oppgaven i Mine kurs; der kan du også slette det.

Les mer

Disse artiklene beskriver trinnene i kontrollpanelene til WebOké; i andre kontrollpaneler fungerer de på lignende måte.

Et øyeblikk …

Sett opp domenene dine

Ordne for hvert domene navnetjenerne, koblingen til hostingen din og hvem som blir innehaver.

Laster inn domenene dine…