script uitvoer blokkeren .htaccess

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Joeri de Man

Joeri de Man

08/02/2012 11:56:34
Quote Anchor link
Ik ben aan het leren om een veilig upload systeem te maken. 1 van de dingen die ik op internet gevonden heb is het voorkomen dat gevaarlijke scripts worden uitgevoerd.

Ik heb in de .htaccess de volgende code staan. Het .htaccess bestand heb ik in de parentfolder geplaats. Maar ook als ik het in dezelfde folder plaats werkt het niet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
Options -ExecCGI
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi


Maar dit lijkt niet te werken.
http://boardit.misterdeman.eu/userfiles/1/scriptwerkt.php

Waar kan het aan liggen?

EDIT: Ik zet er toch maar bij. Naast het voorkomen dat script bestanden worden geopend, is elke directe toegang tot bestanden ook niet toegestaan.
Ik weet het, ik kan een map buiten de publicmap aanmaken hiervoor, maar het is tenslotte een oefening.
Gewijzigd op 08/02/2012 12:13:17 door Joeri de Man
 
PHP hulp

PHP hulp

26/11/2021 23:53:11
 
- SanThe -

- SanThe -

08/02/2012 12:00:41
Quote Anchor link
En wat is de bedoeling van die code?
 
Joeri de Man

Joeri de Man

08/02/2012 12:05:16
Quote Anchor link
Ik had begrepen dat het voorkomt dat die bestanden uitgevoerd worden.
 
B a s
Beheerder

B a s

08/02/2012 12:08:27
 
Joeri de Man

Joeri de Man

08/02/2012 12:16:38
Quote Anchor link
Hoi Bas bedankt voor het opzoeken.

Ik heb een soortgelijke code geprobeerd.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
deny from all
<Files ~ "^\w+\.(gif|jpe?g|png|PNG)$">
order deny,allow
allow from all
</Files>


En dit accepteerd dat er alleen bepaalde bestanden worden geopend. Nog case sensitive ook.

Maar nu komt het, ik wil dat niemand direct de bestanden kan benaderen. Enkel mijn eigen php scripts. Daarvoor had ik al een ander stukje code in het .htaccess bestand staan. Maar dit werkt niet in combinatie met bovenstaande.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
Order deny,allow
Deny from all
Allow from localhost
Gewijzigd op 08/02/2012 12:18:30 door Joeri de Man
 
- SanThe -

- SanThe -

08/02/2012 12:22:22
Quote Anchor link
Php kan er altijd bij. .htaccess is voor html verzoeken.
 
Joeri de Man

Joeri de Man

08/02/2012 12:29:21
Quote Anchor link
Wat ik dus wil voorkomen is dat iemand zijn eigen php script uitvoert op mijn server, omdat het toegang heeft tot alle mappen/bestanden.
Gewijzigd op 08/02/2012 12:29:57 door Joeri de Man
 
B a s
Beheerder

B a s

08/02/2012 12:44:51
Quote Anchor link
Wat je kunt doen als upload service, is de bestanden een path voor je webroot directory opslaan. Op die manier kun je alleen via een script van jou de bestanden opvragen.
 
Joeri de Man

Joeri de Man

08/02/2012 12:48:25
Quote Anchor link
Oke dat begrijp ik.

Het is met een eenvoudig stukje in de .htaccess "Deny from all" al mogelijk om toegang tot de bestanden te voorkomen. En als ik het in de root doe is zelfs dat niet meer nodig.

Stel iemand upload een php bestand voor wat voor reden dan ook. Als hij het dan voor elkaar krijgt om via mijn scripts zijn bestand te openen ben ik alsnog terug bij af toch?
Gewijzigd op 08/02/2012 12:48:49 door Joeri de Man
 
B a s
Beheerder

B a s

08/02/2012 12:57:57
Quote Anchor link
Dat is een beetje vertrouwen in je eigen kunde in veilig programmeren. Dat is natuurlijk goed te voorkomen.
 
- SanThe -

- SanThe -

08/02/2012 12:58:22
Quote Anchor link
Joeri de Man op 08/02/2012 12:48:25:
Het is met een eenvoudig stukje in de .htaccess "Deny from all" al mogelijk om toegang tot de bestanden te voorkomen.


Dat geldt alléén voor html verzoeken. Een phpscript kan er gewoon bij.
 
Joeri de Man

Joeri de Man

08/02/2012 13:05:53
Quote Anchor link
ook php vanaf een andere server?
 
- SanThe -

- SanThe -

08/02/2012 13:09:44
Quote Anchor link
Ik geloof niet dat php een php code op een andere server kan uitvoeren. Als dat zo zou zijn dan include je de database connectie gegevens op een andere server en je bent compleet binnen. Lijkt mij niet.
Gewijzigd op 08/02/2012 13:12:17 door - SanThe -
 
Joeri de Man

Joeri de Man

08/02/2012 22:46:03
Quote Anchor link
Bas Kreleger op 08/02/2012 12:57:57:
Dat is een beetje vertrouwen in je eigen kunde in veilig programmeren. Dat is natuurlijk goed te voorkomen.


Ik heb daar even over nagedacht. Alle bestanden worden hernoemd en de bestandslink in de database opgeslagen. Overschrijven is niet mogelijk.
Sowieso zijn de bestanden niet direct te benaderen van buitenaf.

Maar ik heb begrepen dat afbeeldingen php code kunnen bevatten, en dus zowel als afbeelding als phpscript geopend kunnen worden. Hoe voorkom je dit dan?
 
Maikel Doeze

Maikel Doeze

08/02/2012 22:51:07
 
Joeri de Man

Joeri de Man

10/02/2012 15:39:50
Quote Anchor link
Oke wat leesvoer later.
http://boardit.misterdeman.eu/userfiles/1/beveiligingstest2.php

De afbeelding die in de bovende link getoont word bevat, als het artikel juist is, een stukje php code. http://php.webtutor.pl/en/2011/05/13/php-code-injection-a-simple-virus-written-in-php-and-carried-in-a-jpeg-image/

Het wordt echter niet uitgevoerd en ik weet niet zeker waarom. Ik zag ergens op het forum staan dat de readfile functie veiliger is, maar elders stond dat het niet uitmaakt.

De code die ik gebruik om de afbeelding te tonen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
$file = 'php-logo-virus.jpg';
$file = 'userfiles/'.$file;
$type = getimagesize($file);
$type = $type["mime"];

//handmatig manier van type invoeren
//$type = 'image/png';
header('Content-Type:'.$type);
header('Content-Length: ' . filesize($file));
readfile($file);
?>




Toevoeging op 10/02/2012 23:27:42:

Ik ben benieuwd, is het genoeg om de header zelf in te vullen.

Bijvoorbeeld ik accepteerd alleen jpg bestanden, dus ik vul ook de header in met 'image/jpg'. Kan een eventueel stukje script dan nog steeds geopend worden?

Toevoeging op 11/02/2012 00:20:18:

Ik heb nog het 1 en ander geprobeerd. Maar het "virus" lijkt alleen te openen als ik of het bestand de .php extensie geef (logisch) of als ik bij de readfile() functie geen header opgeef.

Ook volgens deze website http://www.phpclasses.org/blog/post/67-PHP-security-exploit-with-GIF-images.html gaat het probleem alleen op als ik ongericht een bestand open, of gebruikers de kans geef om hun bestanden direct te benaderen.

Begrijp ik het dan goed dat ik het volgende moet doen:

Mappenstructuur
Toegang weigeren voor iedereen via htaccess of map buiten de public gebruiken.

upload
1: mimetype controleren
2: Als de mime niet is toegestaan dan gelijk weigeren.
3: wel toegestaan: bestand uploaden
4: nieuwe bestandsnaam toevoegen in database met autoid, id gebruiken als bestandsnaam
5: bestand in juiste locatie opslaan, bestand hernoemen(autoid) met juiste extensie

tonen
1: in de pagina een get functie gebruiken die het juiste ID stuurt
2: in de getbestand.php voorkomen dat het binnengekomen ID, code is ipv een ID
3: in de database de juiste locatie ophalen
4: header ('Content-Type;*'); * is juiste mime type invoeren op basis van bestandsnaam
5: readfile(); gebruiken
Gewijzigd op 11/02/2012 00:20:37 door Joeri de Man
 
Joeri de Man

Joeri de Man

11/02/2012 16:57:25
Quote Anchor link
kickje: graag bevestiging of bovenstaande stappen genoeg zijn. Zo niet wat dan nog meer.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.