Tjuvens lista
Varje dag frågar program Pyssly efter filer vi aldrig haft: lösenord, källkod och säkerhetskopior. Här är listan, hur många gånger de frågat, varför tjuven vill ha filerna och hur du skyddar din egen sajt.

Vem är tjuven?
Tjuven är oftast ingen människa som sitter och letar. Det är ett program som går från sajt till sajt med samma lista och frågar efter varje fil på den.
Svarar en sajt med filen har tjuven fått nyckeln, utan att bryta upp något alls. Pyssly har inga av filerna, så tjuven får en låtsassida och vi räknar frågan.
Har du en hemsida, en sajt eller en server: se till att de här filerna inte går att hämta. Längst ner står hur du kollar.
Mest eftersökt
Så många gånger har robotar frågat Pyssly efter filerna.
Räknar …
Lösenord och nycklar
Den största skatten: en enda fil med allt som låser upp sajten.
/.envRäknar …Vad är det? En liten textfil där många sajter sparar sina hemligheter: lösenordet till databasen, nycklar till betaltjänster och e-post, och nyckeln som håller inloggningar säkra. Också varianter som .env.production och env.js.
Varför vill tjuven ha den? Med den kan tjuven logga in i databasen, skicka e-post i sajtens namn eller använda sajtens konton hos andra tjänster.
/config.jsonRäknar …Vad är det? Inställningsfiler: config.json, settings.py, web.config, docker-compose.yml, appsettings.json, credentials.json, ett molnkontos service-account.json och Terraforms terraform.tfvars.
Varför vill tjuven ha den? De har ofta samma hemligheter som .env, och dessutom var databasen och servrarna finns. En service-account.json eller en tfvars-fil kan ge hela molnkontot.
/id_rsaRäknar …Vad är det? En SSH-nyckel: den hemliga halvan av nyckeln som låter någon logga in på en server utan lösenord.
Varför vill tjuven ha den? Den som har filen kan ofta logga in på servern direkt, som ägaren själv.
/.htaccessRäknar …Vad är det? Andra filer vars namn börjar med punkt, som .htaccess, .htpasswd, .DS_Store och .bash_history. Punkten betyder dold på datorn, men inte på webben.
Varför vill tjuven ha den? De visar hur servern är inställd och vilka filer som finns, och ibland lösenord (.htpasswd) eller kommandon någon har skrivit.
Så skyddar du dig
- Lägg aldrig hemligheter i mappen som webbservern visar upp. Läs dem från miljövariabler eller en hemlighetstjänst (secrets i Kubernetes, GitHub Actions eller molnet) i stället.
- Spärra alla filer och mappar som börjar med punkt i webbservern, utom /.well-known/. Hur står längre ner.
- Lägg aldrig en privat nyckel i webbmappen, och håll dina egna inloggningsnycklar för dig själv, skyddade med en lösenfras.
Källkoden
Hela sajtens kod, med varje ändring som någonsin gjorts.
/.git/Räknar …Vad är det? Mappen där Git sparar ett projekts hela historia. Ligger den på servern kan vem som helst ladda ner all kod, fil för fil.
Varför vill tjuven ha den? I koden letar tjuven efter lösenord som någon en gång lagt in och sedan tagit bort (de finns kvar i historien), och efter buggar att utnyttja.
/.svn/Räknar …Vad är det? Samma sak för äldre versionshanterare: Subversion (.svn), Mercurial (.hg), Bazaar och CVS.
Varför vill tjuven ha den? Precis som med .git: källkod och gamla hemligheter.
Så skyddar du dig
- Ladda aldrig upp .git-mappen. Bygg sajten och skicka bara det byggda, eller håll mappen utanför med en .dockerignore.
- Spärra punktmappar i webbservern som en extra säkring.
- Har ett lösenord någon gång legat i koden: byt det. Att ta bort det i en ny ändring räcker inte, det finns kvar i historien.
Databaser och säkerhetskopior
Kopior som någon lade på servern för en stund och sedan glömde.
*.sqlRäknar …Vad är det? En databasdump: hela databasen som en fil, till exempel backup.sql eller db.sql.gz.
Varför vill tjuven ha den? Där finns allt sajten vet: användare, e-postadresser, lösenord (förhoppningsvis hashade) och beställningar. En dataläcka på en gång.
*.bakRäknar …Vad är det? Säkerhetskopior och gamla versioner: .bak, .old, .orig, .swp, och arkiv som site.zip eller backup.tar.gz.
Varför vill tjuven ha den? En wp-config.php.bak visas som text i stället för att köras, så lösenorden står där i klartext. Ett zip-arkiv kan vara hela sajten.
Så skyddar du dig
- Spara säkerhetskopior utanför webbmappen, helst på en annan maskin.
- Spärra .sql, .bak, .zip och liknande i webbservern.
- Redigera inte filer direkt på servern: editorer lämnar kopior som .swp och ~ efter sig.
WordPress
WordPress driver en stor del av webben, så tjuven provar alltid dess dörrar, också hos sajter som inte har WordPress, som Pyssly.
/wp-login.phpRäknar …Vad är det? WordPress inloggningssida.
Varför vill tjuven ha den? Tjuven provar vanliga användarnamn och lösenord om och om igen, i hopp om att något stämmer.
/wp-admin/Räknar …Vad är det? Mappen för WordPress adminpanel, med installationssidan i.
Varför vill tjuven ha den? En halvfärdig installation kan tjuven slutföra själv och bli admin. Annars är det samma dörr som inloggningen.
/xmlrpc.phpRäknar …Vad är det? Ett gammalt gränssnitt i WordPress för att publicera från andra program.
Varför vill tjuven ha den? I gamla versioner kunde tjuven prova hundratals lösenord i ett enda anrop. Det är fortfarande en dörr att gissa lösenord genom, och pingbacks kan få sajten att skicka trafik mot andra sajter.
/wp-content/Räknar …Vad är det? Mappen med tillägg, teman och uppladdade filer.
Varför vill tjuven ha den? Tjuven letar efter gamla tillägg med kända säkerhetshål, och efter säkerhetskopior som tillägg har lagt där.
/wp-includes/Räknar …Vad är det? WordPress egna programfiler.
Varför vill tjuven ha den? De visar vilken version sajten kör, och därmed vilka kända hål som kan finnas.
/wp-json/Räknar …Vad är det? WordPress REST-gränssnitt.
Varför vill tjuven ha den? Det kan lista sajtens användarnamn, så tjuven vet vilka konton som är värda att prova lösenord på.
/wp-config.phpRäknar …Vad är det? WordPress inställningsfil, med databasens lösenord och sajtens hemliga nycklar.
Varför vill tjuven ha den? Körs PHP som det ska ser ingen innehållet, men en kopia (wp-config.php.bak, wp-config.php~) eller en trasig server visar allt.
Så skyddar du dig
- Uppdatera WordPress, teman och tillägg, och ta bort tillägg du inte använder.
- Slå på tvåstegsinloggning, och stäng av xmlrpc.php om du inte behöver det.
- WordPress letar också efter wp-config.php en mapp ovanför installationen. Flytta den dit bara om den mappen inte själv visas på webben, och lämna aldrig kopior av filen.
Databasverktyg
Program som låter en sköta databasen från en webbsida.
/phpmyadmin/Räknar …Vad är det? phpMyAdmin, ett vanligt verktyg för att sköta MySQL-databaser i webbläsaren.
Varför vill tjuven ha den? Hittar tjuven det provar den lösenord, eller kända hål i gamla versioner. Kommer den in har den hela databasen.
/adminer.phpRäknar …Vad är det? Adminer, ett liknande verktyg i en enda fil som ofta läggs upp en stund och glöms.
Varför vill tjuven ha den? Samma som phpMyAdmin: en inloggning rakt in i databasen.
Så skyddar du dig
- Lägg inte databasverktyg på den publika sajten. Kör dem på din egen dator och nå databasen genom en SSH-tunnel eller ett VPN.
- Måste de finnas: lås dem bakom en extra inloggning eller en lista med tillåtna adresser.
Felsökningssidor
Sidor som utvecklare använder för att se in i en sajt medan den körs. Bra på din egen dator, farliga på webben.
/phpinfo.phpRäknar …Vad är det? En sida som visar alla PHP:s inställningar, också miljövariablerna.
Varför vill tjuven ha den? Där står ofta lösenord och nycklar, sökvägar och exakta versioner: en karta över servern.
/vendor/phpunit/Räknar …Vad är det? Ett testverktyg för PHP som ibland följer med till servern i mappen vendor.
Varför vill tjuven ha den? Gamla versioner har ett hål som låter vem som helst köra egen kod på servern.
/actuator/Räknar …Vad är det? Spring Boots driftsidor för Java-appar.
Varför vill tjuven ha den? Vissa av dem visar miljövariabler, inställningar eller en minnesdump med lösenord i.
/server-statusRäknar …Vad är det? Apaches statussida, som visar vad servern gör just nu.
Varför vill tjuven ha den? Den visar vilka adresser alla besökare frågar efter, ibland med hemliga länkar och nycklar i.
/_ignition/Räknar …Vad är det? Ignition, felsökningssidan i Laravel.
Varför vill tjuven ha den? Gamla versioner har ett hål som låter tjuven köra egen kod, och en felsida visar ofta inställningarna.
/_profiler/Räknar …Vad är det? Symfonys profilerare, som sparar varje anrop med allt som fanns i det.
Varför vill tjuven ha den? Den visar inloggningar, sessioner och inställningar för varje besök, också andras.
Så skyddar du dig
- Kör aldrig en sajt i felsökningsläge på webben: APP_DEBUG=false, och ingen utvecklingsmiljö i drift.
- Ta bort phpinfo-filer och testverktyg innan sajten går live (composer install --no-dev).
- Lås driftsidor som Actuator och server-status till din egen adress eller ett internt nät.
Gamla dörrar
Program och sidor som servern kör när någon frågar efter dem.
/cgi-bin/Räknar …Vad är det? En mapp för gamla skript som servern kör, ofta i Perl eller skal.
Varför vill tjuven ha den? Gamla skript har kända hål, som Shellshock, som låter tjuven köra kommandon på servern.
/boaform/Räknar …Vad är det? Inställningssidor på routrar och kameror (boaform, HNAP1).
Varför vill tjuven ha den? Tjuven letar efter apparater att ta över med gamla hål eller fabrikens lösenord, för att använda dem i ett botnät.
*.phpRäknar …Vad är det? Vilken PHP-fil som helst, till exempel shell.php eller en fil med ett konstigt namn.
Varför vill tjuven ha den? Ofta letar tjuven efter en bakdörr (ett webbskal) som någon annan redan har lagt på sajten, för att ta över den.
*.aspRäknar …Vad är det? Program i andra språk som servern kör: .asp, .aspx, .jsp och .cgi.
Varför vill tjuven ha den? Samma som med PHP: kända hål i gamla sidor, eller en bakdörr som redan finns.
Så skyddar du dig
- Ta bort allt servern inte behöver köra: gamla skript, testsidor och mappar som cgi-bin.
- Byt fabrikens lösenord på routrar och kameror, uppdatera dem, och visa aldrig deras inställningssidor mot internet.
- Låt bara köras det som ska köras: en uppladdad fil ska aldrig kunna köras som kod.
Butiker och fiskesajter
Två sorters letande som inte är ett inbrott på en gång, men nära.
/cart.jsRäknar …Vad är det? Filer som varje Shopify-butik har, som cart.js och products.json.
Varför vill tjuven ha den? Med dem hittar programmet butiker och läser av varor och priser, ofta för att kopiera dem till falska butiker.
/lander/Räknar …Vad är det? Rester av ett nätfiskepaket: landningssidor och skript som härmar en bank eller ett paketbud.
Varför vill tjuven ha den? Den som frågar letar efter sajter där någon redan lagt in ett sådant paket: hackade sajter att använda igen.
Så skyddar du dig
- Det en butik visar för alla kan alla läsa. Lägg inget hemligt i varor eller produktfält.
- Ser du en mapp eller fil du inte känner igen på din server, som lander/: någon kan ha brutit sig in. Ta bort den, byt alla lösenord och uppdatera allt.
Spärra i webbservern
Det bästa skyddet är att filerna aldrig finns på servern. Spärrarna här är en extra säkring om något ändå hamnar där.
Alla låter /.well-known/ vara öppen, för den behövs till exempel för certifikat. Prova på en testsajt först.
# First in the server block: nginx takes the first regex location that matches,
# and a location ^~ (such as /static/) skips them, so repeat these inside it.
# Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
location ~ /\.(?!well-known/) {
return 404;
}
# Databases, backups and old copies
location ~* \.(sql|bak|old|orig|swp|zip|tar|gz|7z)$ {
return 404;
}# Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
RedirectMatch 404 "/\.(?!well-known/)"
# Databases, backups and old copies
<FilesMatch "\.(sql|bak|old|orig|swp|zip|tar|gz|7z)$">
Require all denied
</FilesMatch># Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
@hidden {
path_regexp /\.
not path_regexp ^/\.well-known/([^./][^/]*/?)*$
}
respond @hidden 404
# Databases, backups and old copies, /.well-known/ included
@copies path_regexp \.(sql|bak|old|orig|swp|zip|tar|gz|7z)$
respond @copies 404**/.git
**/.env*
**/*.sql
**/*.bak
**/*.zip
**/id_*
**/*.tfvarsSå kollar du
Fem minuter i en terminal. Byt example.com mot din egen adress.
Kolla bara din egen sajt. Att leta efter andras filer är precis det tjuven gör.
Fråga efter .env
curl -sS -i https://example.com/.envTitta på både svaret och innehållet. 404 eller 403 är bra. Kommer dina inställningar med är filen publik. (Svarar sajten 200 på allt, som många appar gör, ska innehållet vara din vanliga sida.)
Fråga efter .git
curl -sS -i https://example.com/.git/HEADSer du en rad som ref: refs/heads/main ligger hela källkoden ute. En felsida eller din vanliga sida är bra.
Prova under andra mappar
curl -sS -i https://example.com/static/.envEn spärr kan missas i mappar som visas direkt, som /static/ eller /assets/. Prova där, och prova fler filer från listan, som en .sql eller en gammal kopia av en inställningsfil. Det som räknas är om innehållet syns.
Titta i loggen
grep -E '\.env|\.git/|wp-login|phpinfo|\.sql' /var/log/nginx/access.logFrågorna kommer varje dag, så att de syns är inget konstigt. Ett 200 i loggen bevisar inte att något läckt, för många appar svarar 200 med sin vanliga sida. Ser du 200 på .env eller .git/HEAD: hämta adressen som ovan och titta på innehållet.
Om en fil kom fram
- Ta bort filen och spärra adressen.
- Byt varje lösenord och nyckel som stod i den: databasen, e-posten, betaltjänster och molnkontot. Utgå från att tjuven redan har dem.
- Titta i loggen efter vem som hämtade filen, och om något har hänt med kontona sedan dess.
Mer om tjuvar och andra sorters robotar i Så funkar robotarna.