7. modulis · 7.4
Tīmekļa vietnes nostiprināšana: tiesības, galvenes un drošības spraudņi
7. modulis: Drošība · Lasīšanas laiks: 10 minūtes
Mācību mērķis: Pēc šīs nodarbības Jūs varēsiet nostiprināt WordPress tīmekļa vietni, izmantojot tiesības, iestatījumus un drošības galvenes, kā arī prasīsiet reāli novērtēt drošības spraudņu nozīmi.
Galvenie jēdzieni: nostiprināšana (hardening), failu tiesības (644, 755), DISALLOW_FILE_EDIT, bez PHP augšupielāžu mapē, mapes satura saraksts, versijas slēpšana, X-Powered-By, drošības galvenes, rezerves kopiju faili un .git tīmekļa mapē, WAF uz servera, WAF spraudnī, ļaunprogrammatūras skeneris
Kas ir nostiprināšana
Nostiprināšana nozīmē: tīmekļa vietnes iestatīšanu tā, lai kļūda vai ievainojamība radītu pēc iespējas mazāku kaitējumu. Tas neaizstāj atjauninājumus un spēcīgas paroles (7.2. un 7.3. nodarbība), bet samazina to sekas. Iedomājieties māju: atjauninājumi ir slēdzenes, nostiprināšana nozīmē to, ka Jūs rūpējaties, lai ielaušanās gadījumā nelūgtais viesis vis nevarētu nokļūt pie seifa.
Failu tiesības
Katram failam un katrai mapei uz servera ir tiesības: kas drīkst lasīt, rakstīt un izpildīt. Tās tiek rakstītas kā trīs cipari, atsevišķi īpašniekam, grupai un pārējai pasaulei. WordPress dokumentācijas vadlīnijas:
| Kas | Tiesības | Nozīme |
|---|---|---|
| Mapes | 755 | Īpašnieks drīkst visu, citi drīkst lasīt un atvērt |
| Faili | 644 | Īpašnieks drīkst lasīt un rakstīt, citi tikai lasīt |
| wp-config.php | stingrāk, piemēram, 600 vai 640 | Tikai īpašnieks (un, iespējams, tīmekļa servera grupa) drīkst lasīt |
Kura vērtība piemērota failam wp-config.php, ir atkarīgs no tā, kā Jūsu mitināšanas pakalpojumu sniedzējs izmanto PHP: lielākajā daļā koplietotās mitināšanas PHP darbojas kā Jūsu pats lietotājs, un tad pietiek ar 600. Izmēģiniet un pārbaudiet, vai tīmekļa vietne joprojām darbojas.
Nekad 777. Tas nozīmē: ikviens uz servera drīkst rakstīt. Rokasgrāmata, kas saka: "ja augšupielāde nedarbojas, iestatiet mapei 777", risina problēmu nepareizi. Labā mitināšanā tas arī nekad nav nepieciešams.
Iestatījumi failā wp-config.php
Dažas rindas, kas būtiski palīdz (virs "beidziet rediģēt"):
// Nekādu failu rediģēšanu no paneļa (Izskats > Tēmas redaktors un Spraudņi > Spraudņa redaktors).
define( 'DISALLOW_FILE_EDIT', true );
// Kļūdu ziņojumi nekad nedrīkst parādīties apmeklētāju ekrānā (5.4. nodarbība).
define( 'WP_DEBUG', false );Izmantojot DISALLOW_FILE_EDIT, pazūd redaktors, ar kuru panelī var rediģēt tēmu un spraudņu PHP failus. Nelūgts viesis, kurš pārņēmis administratora kontu, tad ar diviem klikšķiem nevar ievietot ļaunprātīgu kodu Jūsu tēmā. Spraudņu instalēšana joprojām ir iespējama; ja vēlaties aizliegt arī to (piemēram, tīmekļa vietnē, ko pārvaldāt klienta vārdā), ir pieejams DISALLOW_FILE_MODS, bet tad arī atjauninājumi caur paneli vairs nedarbosies.
Bez PHP augšupielāžu mapē, bez mapes satura saraksta
Mapē wp-content/uploads ir vieta attēliem un dokumentiem, nekad ne PHP failiem. Ielauzēji, kuri caur ievainojamību var augšupielādēt failu, tieši mēģina tur ievietot PHP failu un to pēc tam izsaukt. Bloķējiet to ar .htaccess failu augšupielāžu mapē (LiteSpeed un Apache gadījumā):
<Files *.php>
Require all denied
</Files>Izslēdziet arī mapju satura rādīšanu. Bez index.php vai index.html faila mapē daži tīmekļa serveri rāda visu failu sarakstu ("Index of /wp-content/uploads/2026/11"). Tas ir izstādes logs ikvienam, kurš meklē rezerves kopijas vai sensitīvus dokumentus. Jūsu tīmekļa mapes failā .htaccess:
Options -IndexesDaudziem mitināšanas pakalpojumu sniedzējiem šis jau pēc noklusējuma ir izslēgts. Šīs nodarbības uzdevums to pārbauda.
Bez atlikumiem tīmekļa mapē
Viss, kas atrodas tīmekļa mapē, ir pieejams caur tīmekli, izņemot to, ko serveris izpilda kā PHP vai bloķē. Bīstami ir:
- wp-config.php kopijas (
wp-config.php.bak,wp-config.old,wp-config.php~no teksta redaktora): tajās ir Jūsu datubāzes parole un tās tiek nosūtītas kā teksts (1.3. nodarbība); - rezerves kopijas, piemēram,
backup.zip,site.tar.gzvaidatabase.sqltīmekļa mapē; .gitmape no izstrādātāja, ar kuras palīdzību kāds var lejupielādēt visu Jūsu kodu (un dažkārt arī paroles);- debug.log mapē wp-content (5.4. nodarbība);
- veci instalācijas vai testa faili, piemēram,
info.phparphpinfo().
Glabājiet rezerves kopijas ārpus tīmekļa mapes vai ārpus servera, un sakopjiet atlikumus.
Versijas slēpšana: neliels ieguvums
WordPress pēc noklusējuma HTML kodā ievieto:
<meta name="generator" content="WordPress 7.1.4" />un to pašu RSS plūsmā. Arī PHP dažkārt uzrāda sevi galvenē: X-Powered-By: PHP/8.3.14. To slēpt ir saprātīgi, bet negaidiet pārāk daudz: ielaušanās programmas vienkārši izmēģina ievainojamību neatkarīgi no rādītās versijas, un versijas bieži var noteikt arī no ?ver= aiz skriptu adresēm. Slēpšana ir sakopšana, nevis drošība. Tīmekļa vietne, kas slēpj savu versiju, bet netiek atjaunināta, ir tikpat neaizsargāta.
Tas ir izdarāms, izmantojot savu nelielu spraudni vai bērna tēmas (child theme) failu functions.php:
remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );Un PHP galveni ar expose_php = Off Jūsu mitināšanas pakalpojumu sniedzēja PHP iestatījumos (DirectAdmin gadījumā sadaļā Select PHP version, Options), vai ar Header unset X-Powered-By failā .htaccess.
Drošības galvenes
Ar dažām galvenes rindām Jūs pārlūkam pasakāt, kā rīkoties ar Jūsu tīmekļa vietni. Svarīgākās:
| Galvene | Kas tā dara |
|---|---|
Strict-Transport-Security | Tikai caur https (3.1. nodarbība) |
X-Content-Type-Options: nosniff | Pārlūks nemēģina minēt, kāds ir faila veids; novērš, ka augšupielādēts "attēls" tiek izpildīts kā skripts |
X-Frame-Options: SAMEORIGIN vai Content-Security-Policy: frame-ancestors 'self' | Citas tīmekļa vietnes nedrīkst rādīt Jūsu tīmekļa vietni ietvarā (frame); novērš clickjacking (neredzamu pogu no Jūsu tīmekļa vietnes zem citas vietnes) |
Referrer-Policy: strict-origin-when-cross-origin | Noklikšķinot uz saites uz citu tīmekļa vietni, tiek nosūtīts tikai domēna nosaukums, nevis pilna adrese |
Permissions-Policy | Izslēdz pārlūka funkcijas, kuras Jūsu tīmekļa vietne neizmanto (kamera, mikrofons, atrašanās vieta) |
Content-Security-Policy | Precīzi nosaka, no kādiem avotiem drīkst nākt skripti un stili. Spēcīga, bet sarežģīti pareizi iestatāma WordPress un spraudņu gadījumā; sāciet ar režīmu Report-Only |
Failā .htaccess (LiteSpeed un Apache gadījumā):
<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>Pēc tam pārbaudiet, vai viss darbojas: iegultais saturs, maksājumu pogas, čata logrīks. Ārēji rīki, piemēram, securityheaders.com un internet.nl, parāda, ko Jūsu tīmekļa vietne patiesībā nosūta.
Drošības spraudņi, godīgi novērtēti
Ir daudz drošības spraudņu (piemēram, Wordfence, Solid Security, All-In-One Security, Sucuri). Tie bieži apvieno: ugunsmūri, ļaunprogrammatūras skeneri, pieteikšanās aizsardzību, divu faktoru autentifikāciju, paziņojumus un nostiprināšanas sarakstu. Noderīgi, bet ar ierobežojumiem:
- Spraudņa ugunsmūris (WAF) sāk darboties tikai tad, kad PHP jau darbojas. Ļaunprātīgam pieprasījumam vispirms jāiziet cauri tīmekļa serverim un PHP, pirms spraudnis to ierauga. Ievainojamību failā, kas tiek izsaukts tieši, vai uzbrukumu, kas pats smagi noslogo PHP, tas ne vienmēr aptur. Ugunsmūris uz servera (piemēram, ModSecurity, Imunify360 vai Jūsu mitināšanas pakalpojumu sniedzēja ugunsmūris) atrodas ķēdē agrāk un aptur vairāk, bez tā, ka Jūsu pakete veic šo skaitļošanas darbu. Jautājiet savam mitināšanas pakalpojumu sniedzējam, kas darbojas uz servera.
- Skeneris atklāj pēc fakta. Ļaunprogrammatūras skeneris pasaka, ka kaut kas ir nepareizi. Tas ir vērtīgi, bet nekas tādējādi netiek novērsts. Un skeneris, kas atrodas tajā pašā serverī, kur uzlauztā tīmekļa vietne, var pats arī būt ielaušanās veicēja pārveidots.
- Tie neaizstāj atjauninājumus. Spraudnis ar zināmu ievainojamību paliek neaizsargāts, pat ar drošības spraudni blakus. Daži drošības pakalpojumi piedāvā "virtuālās ielāpus" (virtual patches), kas aptur zināmus uzbrukumus, kamēr neesat vēl atjauninājis; noderīgi kā pagaidu risinājums, ne kā aizstājējs.
- Tie paši ir spraudnis. Vairāk koda, vairāk kas jāatjaunina, dažkārt arī paši satur ievainojamību. Un divi drošības spraudņi vienlaikus bieži konfliktē.
- Tie patērē skaitļošanas jaudu, īpaši skeneri, kas darbojas uz Jūsu paša servera.
Saprātīga izvēle: vispirms apskatiet, ko jau dara Jūsu mitināšanas pakalpojumu sniedzējs (ugunsmūris, ļaunprogrammatūras skenēšana, pieteikšanās mēģinājumu bloķēšana). Papildiniet to, kas trūkst, parasti divu faktoru autentifikāciju un pieteikšanās mēģinājumu ierobežošanu. Plašs drošības spraudnis ir visnoderīgākais tad, ja pati mitināšana nenodrošina daudz.
Kopsavilkums
- Nostiprināšana ierobežo kļūdas vai ievainojamības radīto kaitējumu; tā neaizstāj atjauninājumus un paroles.
- Mapēm 755, failiem 644, failam wp-config.php stingrāk; nekad 777.
- Ieslēdziet DISALLOW_FILE_EDIT, bloķējiet PHP augšupielāžu mapē, izslēdziet mapju satura sarakstus un sakopjiet rezerves kopijas, .git un debug.log no tīmekļa mapes.
- Versijas slēpšana ir sakopšana, nevis drošība; drošības galvenes palīdz pārlūkam aizsargāt Jūsu apmeklētājus.
- Ugunsmūris uz servera aptur vairāk nekā spraudnis; drošības spraudņi ir papildinājums, nevis aizstājējs.
Tests (quiz)
Uzdevums
Uzdevums A7.4: Ko Jūsu tīmekļa vietne rāda visiem? Ievadiet savas tīmekļa vietnes adresi. Programma nolasa sākumlapu un RSS plūsmu (/feed/) un pārbauda: vai HTML un plūsmas generator-tag nenorāda WordPress versiju, vai galvene X-Powered-By nerāda PHP versiju, un vai Jūsu tīmekļa vietne nosūta X-Content-Type-Options: nosniff, aizsardzību pret ietvariem (X-Frame-Options vai frame-ancestors) un Referrer-Policy? HSTS (3.1. nodarbība) un Permissions-Policy trūkums ir pieļaujams (oranžs).
Uzdevums A7.4b: Bez atlikumiem tīmekļa mapē. Pierādiet, ka tā ir Jūsu pašu tīmekļa vietne (TXT ieraksts vai fails ar uzdevuma kodu). Pēc tam programma pieprasa īsu, fiksētu sarakstu: mapi /wp-content/uploads/ (bez mapes satura saraksta), /.git/HEAD, /wp-content/debug.log un pāris biežāk sastopamus wp-config.php kopiju nosaukumus. Labi ir tad, ja neviens no tiem neatgriež saturu (404 vai 403). Programma neko citu neizmēģina un neko nemaina.
Papildu lasāmviela
Šie raksti apraksta soļus WebOké paneļos; citos paneļos tie darbojas līdzīgi.
- DirectAdmin rokasgrāmata 11.5: Tiesības failiem un mapēm (chmod)
- DirectAdmin rokasgrāmata 11.4: Slēptu failu, piemēram, .htaccess, parādīšana un rediģēšana
- DirectAdmin rokasgrāmata 15.10: Web Application Firewall
- DirectAdmin rokasgrāmata 15.11: Imunify360: Jūsu vietnes skenēšana uz ļaunprogrammatūru
- Failu bloķēšana ar .htaccess, piemēram, plugin-googlemap2-proxy.php
- PHP drošība
- WordPress nostiprināšana (developer.wordpress.org, angļu valodā): https://developer.wordpress.org/advanced-administration/security/hardening/
- Drošības galvenes (MDN, angļu valodā): https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#security
