Avatar billede or.han Nybegynder
28. marts 2007 - 20:00 Der er 7 kommentarer og
2 løsninger

Beskyttelse og adgangskontrol

Hej.

Hvordan er det muligt at bestemme hvor normale brugere og admin har adgang til?

Det jeg mener er fx hvis jeg har et sæt .php-filer, som bruges af admin og nogle andre filer som bruges af normale brugere, hvordan er det så muligt at bestemme hvem der har adgang til hvad?

Jeg har i en sessions-variabel gemt brugerens/admins id, og derfor ville en mulig løsning være at inkludere et tjek i alle de filer hvor der er adgangskontrol. Men da der er tale om en del filer, kunne I evt. have en anden smartere teknik.

Orhan
Avatar billede leif Seniormester
28. marts 2007 - 20:08 #1
Jeg har et felt i min brugerdatabase som har betydning for om de er Admin eller ej, dette kontrollere jeg på, således kan du have flere Administratorer
Avatar billede or.han Nybegynder
28. marts 2007 - 22:50 #2
Ja det forstår jeg godt. Men mit spørgsmål går ud på hvordan jeg kan kontrollere/styre hvilke sider som en administrator og en bruger må se.
Avatar billede leif Seniormester
28. marts 2007 - 22:58 #3
Hvis vi kalder at variblen hedder $admin.


if($admin == "1") {

DIN KODE


}
else
{
echo "Ingen adgang";
}
Avatar billede or.han Nybegynder
28. marts 2007 - 23:24 #4
Det var også det jeg havde tænkt, men troede at der evt. kunne være lidt smartere løsninger.
Avatar billede leif Seniormester
28. marts 2007 - 23:33 #5
En anden måde:
if($admin != "1"){
header("Location: ingenadgang.php");
exit();
}


Kan ligges i en fil som du inkluderer i toppen af filerne
Avatar billede johan.o Nybegynder
29. marts 2007 - 14:25 #6
Du kommer ikke uden om at du skal have en eller anden funktionalitet på de sider som det ikke er alle der skal have adgang til, for at forhindre uvedkommende i at se indholdet. En bruger vil altid have en vis sandsynlighed for at kunne tilgå din side med følsomt indhold, direkte, uden om f.eks. din index.php. Derfor kan du ikke 'nøjes' med at have checks i index.php, men også på hver enkelt side.

Men hvordan skal disse checks så udformes ? Tja, der er nok lige så mange bud, som der er udviklere :), men her er lidt tankespind.

Alle (ALLE !!) sider der inkluderes outputter til en variabel istedet for direkte til klienten.

Princippet er så at hvis en bruger tilgår en side direkte får han intet output da det eneste der sker, er at der defineres en variabel på serveren.

<?php

$varFidibus="Følsomt indhold !!";

?>

Tilgås denne side direkte, sker intet (for klienten), men tilgås den fra

<?php

include("folsomside.php");
echo $varFidibus;

?>

Så kommer der output.....hvis en fjendtlig bruger 'gætter' din variabel kan indholdet ses af denne bruger !!....der er næsten altid en svaghed :)

Du kan også vælge at ligge dine følsomme sider ind i funktioner...

<?php

function fidibus() {
$var="Følsomt indhold";
return $var; }

?>

Så sker der heller ikke noget hvis brugeren tilgår siden direkte, men nu er det ikke en variabel brugeren skal 'gætte' men istedet et funktionskald

<?php

include("folsomside.php");
$var=fidibus();
echo $var;

?>

Det er naturligvis også usandsynligt, men trods alt muligt.....

Så kan du selvfølgelig ligge alle dine funktioner til følsomt indhold på din index.php side og så altid huske at lave die(); i slutningen af denne, således at man ikke kan tilgå funktionerne ved at lave include("ditsite.dk/index.php");

Tja, som sagt blot lidt tankespind....

Med hensyn til check af rettigheder bruger jeg nogle gange et array som defineres på index.php med brugerens rettigheder i. Hvis jeg har f.eks. 3 områder som kun bestemte brugere kan have adgang til (måske har en kun adgang til område 1, mens en anden kun har adgang til område 2 og en anden har måske adgang til alle områder) har jeg en user admin side (som kun jeg har adgang til) hvor jeg ganske simpelt via checkbokse kan definere for den enkelte bruger hvilke områder denne skal have adgang til. Resultatet af disse checkbokse gemmes så i en database. Det kan forenklet set se således ud i tabellen -->

Bruger, område 1, område 2, område 3
"Bent", "CHECKED", "", ""
"Tneb", "", "CHECKED", "CHECKED"
"Etnb", "CHECKED", "CHECKED", "CHECKED"

<-- Grunden til at værdierne er CHECKED er at det gør det nemmere når jeg skal vise brugernes rettigheder på min admin side ;)

Så bruger Bent har adgang til område 1 men ikke til 2 eller 3
Etnb har adgang til alle områder
osv...

Så når en bruger logger ind med password og brugernavn, defineres et array som fyldes med adgangs informationerne

$arr["1"]=""; $arr["2"]=""; $arr["3"]=="CHECKED";

sådan ville et array se ud for en bruger der kun har adgang til område 3.

I starten af mine sider checker jeg så om brugeren har adgang til det område siden ligger i -->

<?php

if($arr[3]!="CHECKED") { .....Ups, ingen adgang..... }

?>

Det er ikke 100% fejlfrit, men det er det altså ikke meget der er :), men det gør administrationen af bruger rettigheder rimelig overskuelig, og let at ændre.

Håber du kan bruge ovenstående til et eller andet :)

Mvh. Johan
Avatar billede or.han Nybegynder
10. juli 2007 - 21:44 #7
Læg I bare et svar hver.
Avatar billede leif Seniormester
10. juli 2007 - 22:33 #8
Håber du kunne bruge det til noget
Avatar billede johan.o Nybegynder
11. juli 2007 - 01:04 #9
Ditto :)

Mvh. Johan
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester