Forhindre PHP filer i at blive åbnet fra “uploads” mapper

Dette er en meget simpel måde at forhindre .php filer i at blive åbnet på sin side. Det kræver .htaccess og nogle få linjer kode som du får længere nede.

Hvornår det kan være brugbart…

Hvis du har en hjemmeside som på en eller anden måde tillader upload af filer (uanset om det er billeder eller andre filer), så kan du risikerer at ved fejl i koden at man kan uploade filer af typen .php (eller andre typer) , hvilket så måske kan tillade personer i at lave ændringer på din side, hvis de selv kan bestemme hvad indhold der skal være i filen.

Dette er meget udbredt metode at inficerer sider eller ødelægge dem, simpelthen ved at finde fejl som tillader upload af filer og så aktiverer filen når den er lagt ind på siden.

Hvis man ser på en WordPress side, uden nogen sikkerhed plugins eller andre måder at sikre siden på, men andre plugins. Så vil man ved at ligge en .php fil i mappen wp-content/uploads kunne gå ind på siden og åbne denne .php fil i sin browser. Hvis en person som ønsker at skade siden uploader en .php fil til den mappe og så åbner den i sin browser, vil man kunne lave rigtig mange ændringer på en side før det bliver opdaget og fjernet.

Det gælder ikke kun for WordPress at man kan gøre sådan, det er en af de ældste metoder til at få adgang til sider på og derfor bør man sikre sin side på denne måde, uanset om man tillader upload af filer eller ej.

Sådan kan du forhindre det…

Start med at oprette en fil med navnet .htaccess i hovedmappen for din side installation (tjek med din webhost om du kan benytte .htaccess). Dette er gældende for alle typer systemet (WordPress, Joomla, CMS made simple osv osv).

Indsæt følgende linjer i filen:

 RewriteEngine On
 RewriteRule ^(.*)/uploads/(.*).php(.?) -

[F] </IfModule>

Det som linjerne gør er at benytte mod_rewrite modulet på serveren til at fortæller serveren at filer som ligger i mappen (.*)/uploads/(.*) og som ender på .php skal den fortælle at det er forbudt at åbne dem. Serveren sender så normalt en 301 Forbidden besked til den bruger som har forsøgt at åbne filen.

301forbidden

Har man WordPress vil linjerne man har tilføjet betyde at mappen /wp-content/uploads/ ikke længere tillader åbning af .php filer. Det samme er gældende for mapper ligger i uploads mappen. Plugin som ithemes security benytter sig af samme sikkerhed for at sikre WordPress installationer, så har du WordPress kan du eventuelt bare installere det plugin og aktiverer den funktion.

Har man andre systemet end WordPress, vil man ofte ikke have en mappe som ligger samme sted. Joomla har eksempelvis /images/ mappen, så der kunne man lave følgende:

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteRule ^/images/(.*).php(.?) - [F]
</IfModule>

Magento har en mappe som hedder skins, hvor man også kan lave samme ændringer på.

Det vigtige er at den mappe man fortæller serveren at man ikke ønsker PHP filer åbnet i, skal være en mappe som systemet ikke selv benytter PHP filer fra, da siden så vil stoppe med at virke korrekt. Hvis man skulle komme til at sætte en forkert mappe, kan man blot slette linjerne igen og så virker siden igen. Husk at test alle ændringer.

En anden metode at opnår det samme på er denne:

<Files *.php>
deny from all
</Files>

Hvis man vælger denne metode skal man så oprette en .htaccess fil for hver mappe man ønsker ikke skal tillade .php filer, jeg benytter selv den første metode.