28. marts 2007 - 20:00Der 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.
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
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
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 :)
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.