is het mogelijk om een directory te beschermen met login?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Phoenix flyalot

Phoenix flyalot

31/10/2014 08:48:44
Quote Anchor link
Beste supertastisch forum,

Ik vroeg me af of het mogelijk is om alle bestanden in een directory te beschermen van mensen die niet ingelogd zijn. En ook haar child directories.

Reden:
Ik had gehoopt het veiliger te maken op deze manier, als ik het dan eens vergeet... :)

groetjes!
phoenix
 
PHP hulp

PHP hulp

21/11/2024 16:14:28
 
Ivo P

Ivo P

31/10/2014 09:05:39
Quote Anchor link
ik zou de betreffende directory buiten de document root plaatsen, maar een .htaccess file erin zetten met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Deny from ALL


laten we zeggen dat de map heet "geheim"

Dan kun je in de document root een script plaatsen toegangcheck.php

Als je geheim/doc.pdf wilt aanroepen, zul je via toegangcheck.php moeten kijken of het mag.

We zetten in .htaccess erbij:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
RewriteEngine On
RewriteRule (.*) /toegangcheck.php?file=$1 [L]


in toegangcheck zet je

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
if(true) {
  if(is_file($_GET['file'])) {
    readfile($_GET['file']);
  }

}

else {
   echo 'access denied';
}

?>


evt. voor readfile ook nog met header() een contenttype meegeven. zie ook http://php.net/readfile
Waarbij true een controle moet worden of de user ingelogd is.
 
Ward van der Put
Moderator

Ward van der Put

31/10/2014 09:18:35
Quote Anchor link
>> Ik vroeg me af of het mogelijk is om alle bestanden in een directory te beschermen van mensen die niet ingelogd zijn.

Als mensen niet zijn ingelogd, weet je niet zeker wie je voor je hebt en kun je hun bestanden daarom niet goed beveiligen. Wat je het bijvoorbeeld kunt doen:

1. Sla de bestanden op in een directory buiten de root / van de site.

2. Maak in de root bijvoorbeeld een directory /download/ en laat daarin index.php het weergeven en/of downloaden van de bestanden afhandelen. Hier kun je ook de login van gebruikers inbouwen.
 
Phoenix flyalot

Phoenix flyalot

31/10/2014 11:59:15
Quote Anchor link
vriendelijk bedankt :)
 
TJVB tvb

TJVB tvb

31/10/2014 12:17:52
Quote Anchor link
Ivo P op 31/10/2014 09:05:39:
...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
if(true) {
  if(is_file($_GET['file'])) {
    readfile($_GET['file']);
  }

}

else {
   echo 'access denied';
}

?>


En dan doe ik toegangcheck.php?file=./../path/naar/databaseconfig.php en ik zie ineens je database configuratie op mijn scherm staan.
Dat is best aardig.

Op het moment dat je bestanden via een url wilt includen moet je een whitelist gebruiken. Of ze opschonen met bijvoorbeeld pathinfo
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$file
= false;
$path = '/path/waar/de/bestanden/staan/';
if(isset(GET['file'])){
    $file = pathinfo(GET['file'],PATHINFO_BASENAME);
    if(!file_exists($path . $file)){
        $file = false;
    }
}

if($file !== false){
    //doe iets met het bestand
}else{
    //het bestand bestaat niet, doe iets zonder een bestand
}
?>
 
Ivo P

Ivo P

31/10/2014 12:52:25
Quote Anchor link
het voorbeeld is uiteraard niet compleet: een content header ontbreekt ook.

Liever nog dan de parameter file= mee te geven als get-parameter (in een rewrite trouwens)
zou ik gaan voor $_SERVER['REQUEST_URI'] om de aangesproken filename direct te kunnen oppakken.

Daarmee dwing je dan al af dat het om een file in die directory gaat.
 
Phoenix flyalot

Phoenix flyalot

31/10/2014 15:07:19
Quote Anchor link
Hey ik ben terug maar met nog een alternatief dat voor mij werkt... Omdat ik die apparte folders nog niet onder de knie heb.

wanneer mijn website lanceert gebruik ik een include global.php:
!code heb ik van dreamweaver laten genereren

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
if (!isset($_SESSION)) {
  session_start();
}

$MM_authorizedUsers = "admin";
$MM_donotCheckaccess = "false";

// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) {
  // For security, start by assuming the visitor is NOT authorized.
  $isValid = False;

  // When a visitor has logged into this site, the Session variable MM_Username set equal to their username.
  // Therefore, we know that a user is NOT logged in if that Session variable is blank.

  if (!empty($UserName)) {
    // Besides being logged in, you may restrict access to only certain users based on an ID established when they login.
    // Parse the strings into arrays.

    $arrUsers = Explode(",", $strUsers);
    $arrGroups = Explode(",", $strGroups);
    if (in_array($UserName, $arrUsers)) {
      $isValid = true;
    }

    // Or, you may restrict access to only certain users based on their username.
    if (in_array($UserGroup, $arrGroups)) {
      $isValid = true;
    }

    if (($strUsers == "") && false) {
      $isValid = true;
    }
  }

  return $isValid;
}


$MM_restrictGoTo = "login.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {  
  $MM_qsChar = "?";
  $MM_referrer = $_SERVER['PHP_SELF'];
  if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
  if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0)
  $MM_referrer .= "?" . $_SERVER['QUERY_STRING'];
  $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
  header("Location: ". $MM_restrictGoTo);
  exit;
}

?>
 
Ivo P

Ivo P

31/10/2014 15:24:45
Quote Anchor link
je wilt scripts afschermen?

Ik dacht aan pdf's, afbeeldingen en dergelijke...
 
E. de Groot

E. de Groot

31/10/2014 15:31:10
Quote Anchor link
.htaccess en .htpasswd?
 
- Ariën  -
Beheerder

- Ariën -

31/10/2014 16:18:37
Quote Anchor link
@Edgar: Ik denk dat er een eigen login-systeem wordt bedoeld, en niet een tweede in de vorm van htaccess en htpasswd.
 
Phoenix flyalot

Phoenix flyalot

02/11/2014 19:56:55
Quote Anchor link
Wat ik bedoelde is dat ik af en toe wel eens scripts plaats in dezelfde directory. Maar dan zit ik even te denken, als mensen daar naar toe zouden surfen, dan zouden zij eventueel aan die inhoud kunnen :o dus ja, ik dacht, ik wil enkel toegang verlenen tot de bestanden die ik opgeef.
 



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.