• maleadt
  • Registratie: Januari 2006
  • Laatst online: 09-02 20:18
(I know, de topics blijven maar komen :P)

Anyway, weer een nieuw probleem op de baan. Twee zelf!
Ik slaag er maar niet in om deze twee relatief eenvoudige problemen te omzeilen. Hier zijn ze:


1) Ik draai een webapp op mijn server, die van enkele scripts in een include directory gebruik maakt. Nu wou ik enkel de php's in de root directory toestaan, en al de rest blokkeren. Dit deed ik als volgt:
code:
1
2
3
4
<FilesMatch "\.php$">
    Deny from none
    Satisfy any
</FilesMatch>

Dit stukje code laat PHP's toe, terwijl al de rest geblokkeerd is door een "deny from all" in de parent directory.
Ik kwam echter tot de conclusie dat PHP's in subfolders van mijn webapp, nog altijd toegankelijk waren! Dit was natuurlijk niet de bedoeling, en ik zou dit liever kunnen oplossen zonder een "deny from all" in elke subfolder.
Ik had dit proberen oplossen met een negatieve regex, die scant op backslashes. However, dit bleek niet te werken! Na veel opzoekingswerk kwam ik tot de conclusie dat Files & FilesMatch scant op de bestandsnaam, en niet op het pad relatief aan de .htaccess...


2) In dezelfde htaccess wil ik een "Deny from all" van de parent directory, overriden. Dit wou ik doen door alle .php bestanden toe te laten (zie vraag 1), maar ook een call naar de directory zelf toe te laten. Uitgelegd met voorbeeldjes:
/applications -> dit wil ik blokkeren
/applications/webapp/index.php -> dit wil ik toelaten
/applications/webapp -> dit wil ik toelaten
Daarvoor gebruikte ik volgende HTACCESS
code:
1
2
3
4
5
DirectoryIndex index.php
<FilesMatch "^$|(blame|comp|diff|dl|filedetails|form|index|listing|log|rss|wsvn)\.php">
    Deny from none
    Satisfy any
</FilesMatch>

( Voor het moment list ik dus alle toegankelijke PHP bestanden, hopelijk kan ik dit vervangen door een mooiere oplossing uit vraag 1 :) )

Probleem hier is, dat de "^$" regex mij met volgende situatie opzadelt:
/applications/webapp/ -> toegelaten, is de bedoeling
/applications/webapp -> blocked, zou niet mogen!

Apache's log geeft me het volgende:
code:
1
client denied by server configuration: /var/www/public/applications/webapp


Nu dacht ik eerst dat dit zou liggen aan de "deny from all" in de parent directory, maar niets is minder waar: als ik voor te testen een "deny from none" toevoeg aan de .htaccess in de webapp folder, kan ik wél surfen naar /applications/webapp.


Dus in short nog even de layout van mijn server:
/applications/.htaccess -> deny from all
/applications -> blocked
/applications/webapp/.htaccess -> zie 1) en 2), FilesMatch "$^|\.php"
/applications/webapp -> blocked (niet de bedoeling)
/applications/webapp/ -> toegelaten
/applications/webapp/index.php -> toegelaten
/applications/webapp/include/include.php -> toegelaten (niet de bedoeling)


Alvast bedankt voor alle reacties,
maleadt

Verwijderd

Los van je probleem, waar werk je niet met een include directory buiten de webroot?

Dus /applications/wwwroot/ & /applications/includes/

Zo ben je bijna 100% zeker dat niemand aan de files via geraakt via de browser, tenzij je één of andere slechte coding online zet. Includen vanaf de wwwroot/ kan perfect :)

Verder kan je in /include/ ook een htaccess zetten met Options -Indexes, dan moeten ze al de exacte filenames weten, bovendien kan je als je apache / php deftig is ingesteld toch nooit de source downloaden, je ziet enkel de output van de code :)

  • maleadt
  • Registratie: Januari 2006
  • Laatst online: 09-02 20:18
Dat probeer ik zoveel mogelijk (ik werk met /var/www/public/ en /var/www/private/, waarbij enkel de include directory aangeboden wordt door Apache), maar WebSVN heeft al zijn includes hard-coded in de source :(

En inderdaad, de includes returnen normaalgezien niks en de indexes staan af, maar ik ben al vaak sites tegengekomen die plots door een apache "crash" rauwe PHP's aanbieden in plaats van de gerenderde HTML. En de wachtwoorden tot mijn subversion repo's en MySQL DB's blijven me nog altijd enigszins dierbaar :)

[ Voor 6% gewijzigd door maleadt op 13-06-2008 12:48 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 17-12-2025

curry684

left part of the evil twins

code:
1
2
3
RewriteEngine on
RewriteBase /
RewriteRule !^.*\/.*\.php - [F]

Moet gewoon werken.

Het is overigens een tig keer simpeler om gewoon te zorgen dat al je 'backend' code in 1 enkele directory te zetten (/includes of /system), en daarin 1 enkele .htaccess met 'deny from all' op alles te zetten. Die folder moet gewoon dicht staan, en de rest van je site is per definitie public.

edit:
anders zet ik even niet een topic anderhalf uur open alvorens te reageren... scheelt typwerk

[ Voor 73% gewijzigd door curry684 op 13-06-2008 13:40 ]

Professionele website nodig?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • maleadt
  • Registratie: Januari 2006
  • Laatst online: 09-02 20:18
Excuses, ik dacht dat die bij ServerSide scripting hoorde :) maar inderdaad, bedankt voor te verplaatsen.

@curry684
Met de rewriteEngine lukt het inderdaad (als ik tenminste het "!" wegdoe dat je in je regex zet, anders maakt het niks uit). Maar het is inderdaad simpeler als ik de backend gewoon kan locken, anders eens via sed proberen om de hard-coded paths absoluut te maken naar de private include directory, moet normaal ook wel werken :)

EDIT: ik heb denk ik nog een mooiere gevonden:
code:
1
2
3
4
5
Deny from none
RewriteEngine on
RewriteBase /applications/WebSVN
RewriteRule ^[^\/]*\.php - [S=1]
RewriteRule .* - [F]

[ Voor 17% gewijzigd door maleadt op 13-06-2008 22:51 ]

Pagina: 1