[PHP] Complete directory beveiligen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Ik zoek een manier waarop ik via PHP een complete directory kan beveiligen. In deze directory staan HTML bestanden, afbeeldingen maar ook submappen.

Hoe zorg ik ervoor dat mensen moeten inloggen via een PHP script om de bestanden in deze map te kunnen weergeven. Een htaccess en htpasswd oplossing voldoet niet, aangezien het de bedoeling is dat verschillende login's in verschillende directory's uitkomen.

Ik heb geprobeerd het geheel via een RewriteMatch door te sturen naar een PHP bestand (view.php?file=$1), alleen krijg je dan problemen met relatieve links in html bestanden.

Alvast bedankt.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Probeer tóch een .htaccess optie, en vraag in php de $_PHP_AUTH_USER op, a.d.h.v. waar je mensen weer door kan sturen :)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Dan bedoel je een htaccess login (dus met htpasswd)?

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Kaassoevlee schreef op dinsdag 20 december 2005 @ 09:44:
Dan bedoel je een htaccess login (dus met htpasswd)?
Juist. Zodra je geauthenticeerd voor een directory bent kun je mensen in een index.php zelf verder afhandelen.

neem hier eens een kijkje :)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 17:05

orf

Of zet een een .htaccess bestandje in de map waarin je de bestanden voor iedereen denied:

deny from all

Met een PHP scriptje buiten die map kun je dan de bestanden uit de map halen en met de juiste headers en readfile() tonen.

Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Ik heb nu een .htaccess en .htpasswd in de root map gezet, werkt perfect. Vervolgens stuur ik via php de gebruiker door naar de jusite map:
PHP:
1
2
3
<?php
header("location: " . $_SERVER["PHP_AUTH_USER"] . "/");
?>

Werkt ook goed, alleen nu kun je simpel de directory in de adresbalk van je browser aanpassen zodat je bij een map van een andere gebruiker komt, dit moet natuurlijk niet kunnen.

[ Voor 7% gewijzigd door jelmervos op 20-12-2005 14:41 ]

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Kaassoevlee schreef op dinsdag 20 december 2005 @ 14:40:
Ik heb nu een .htaccess en .htpasswd in de root map gezet, werkt perfect. Vervolgens stuur ik via php de gebruiker door naar de jusite map:
PHP:
1
2
3
<?php
header("location: " . $_SERVER["PHP_AUTH_USER"] . "/");
?>

Werkt ook goed, alleen nu kun je simpel de directory in de adresbalk van je browser aanpassen zodat je bij een map van een andere gebruiker komt, dit moet natuurlijk niet kunnen.
Het is misschien nog beter en veiliger om de directory met beveiligde bestanden buiten de wwwroot te zetten (zodat je er vanaf het web niet zomaar bij kunt), en alle acties die daarheen linken via je index.php te linken.

PHP:
1
2
3
4
5
6
7
echo ("<strong>Jouw beschikbare bestanden</strong><ul>");
foreach( glob("./../../{$_SERVER['PHP_AUTH_USER']}/*.doc") as $filename)
{
$file = basename($filename);
echo ("<li><a href='index.php?getfile={$file}'>{$file}</li>\n");
}
echo("</ul>");


Dan de getfile $_GET parameter afvangen, en weer linken naar
PHP:
1
2
3
header('content-type: application-x-msword');
fpassthru("./../../{$_SERVER['PHP_AUTH_USER']}/{$_GET['getfile']}.doc");
die();

[ Voor 13% gewijzigd door SchizoDuckie op 20-12-2005 15:15 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Kan het niet via een rewrite uitbreiding in .htaccess, dus iets als dit:
code:
1
2
RewriteEngine On
RewriteRule !^.*/secure/%{REMOTE_USER}/.*$ /denied.html
Helaas werkt dat niet

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

Verwijderd

andere variant:
laat de gebruikers inloggen met htaccess (zoals anderen al hadden beschreven) en include in ieder bestand is_logged_in.php die kijkt of de gebruiker is ingelogd en zo ja of deze toegang heeft tot dit bestand, of in iedere gebruiker directory

deny from all
allow from [username] (weet niet zeker of dit de goede code is, kijk op de apache site)

of een combinatie van die twee
nou nog een beetje knutselen en aanpassen op je eigen situatie, dan moet het wel lukken :)

Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Helaas kan ik dat niet doen, de bestanden worden door andere mensen beheert welke ik niet kan lastig vallen met php shit.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Ik heb het geprobeerd met deze regels in mijn htaccess, onder de Auth regels:
code:
1
2
RewriteEngine On
RewriteRule !^%{REMOTE_USER}(.*)$ %{REMOTE_USER}/$1

Maar volgens mij werken die variabelen niet in het eerste deel van RewriteRule.

[ Voor 3% gewijzigd door jelmervos op 21-12-2005 11:33 ]

"The shell stopped unexpectedly and Explorer.exe was restarted."

Pagina: 1