is het mogelijk om een directory te beschermen met login?
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
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:
in toegangcheck zet je
Code (php)
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.
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.
vriendelijk bedankt :)
Ivo P op 31/10/2014 09:05:39:
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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.
wanneer mijn website lanceert gebruik ik een include global.php:
!code heb ik van dreamweaver laten genereren
Code (php)
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
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;
}
?>
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;
}
?>
Ik dacht aan pdf's, afbeeldingen en dergelijke...
.htaccess en .htpasswd?
@Edgar: Ik denk dat er een eigen login-systeem wordt bedoeld, en niet een tweede in de vorm van htaccess en htpasswd.
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.