Gå til innhold

Begrense tilgang til PHP-filer i Apache


Anbefalte innlegg

Litt usikker på om dette er et apachespørsmål, but here goes.

 

Jeg har laget en side hvor brukere kan logge på, ting skjer da i følgende rekkefølge:

 

1) Brukernavn og passord sjekkes mot SQL-databasen.

2) mt_rand() setter en tilfeldig verdi i en "session" tabell i databasen, denne tabellen inneholder på samme rad brukerens id slik at det er klart hvem som er logget på.

3) Verdien fra mt_rand() settes som en cookie, denne brukes til å beregne hvilken bruker som er logget på, rettigheter osv.

 

Dersom jeg skal begrense tilgangen til en side slår jeg først opp brukerens id via session-tabellen, sjekker iden jeg får herfra opp mot en permissions table og gir output derfra. Problemet er at jeg har en del sider som blir lastet via php include. Om noen prøver å få tilgang til disse direkte, feks ved å skrive http://xx/random_page.php får de se siden, og omgår dermed "sikkerhetsprosessen" lenger opp på siden.

 

Spørsmålet blir da: Finnes det en måte å sette rettigheter i apache/php slik at sider KUN kan vises dersom de kalles av phps include?

Lenke til kommentar
Videoannonse
Annonse

Du kan gjøre dette gjennom enkle sikkerhetssikringer. Hvis du setter en variable før du includerer, og sjekker om denne variablene er satt i fila kan du sikre mot overgrep som dette

 

$INCLUDEERKULT = 1337;

include "login.php";

 

I login.php

 

if ($INCLUDEERKULT == 1337)

// Her skjer det ting

else

die("Hacking attempted");

Lenke til kommentar

Du kan gjøre dette gjennom enkle sikkerhetssikringer. Hvis du setter en variable før du includerer, og sjekker om denne variablene er satt i fila kan du sikre mot overgrep som dette

 

$INCLUDEERKULT = 1337;

include "login.php";

 

I login.php

 

if ($INCLUDEERKULT == 1337)

// Her skjer det ting

else

die("Hacking attempted");

Idéen er god, men å bruke vanlige variabler til det er bare dumt. Hva skjer der når register_global er skrudd på? Bruk nå heller konstanter til det.

Noen på IRC mener jeg kan bruke $http_refer, er det en dårlig ide?

Ja, det er en dårlig idé. Dette kan lett endres hvis man virkelig ønsker tilgang, og hva gjør du med de som surfer uten å sende «referrer» til serveren?

Lenke til kommentar

Idéen er god, men å bruke vanlige variabler til det er bare dumt. Hva skjer der når register_global er skrudd på? Bruk nå heller konstanter til det.

Vennligst utdyp :)

I stedet for

$INCLUDEERKULT = 1337;
include "login.php";

I login.php

if ($INCLUDEERKULT == 1337)
// Her skjer det ting
else
die("Hacking attempted");

som vil medføre at login.php?INCLUDEERKULT=1337 i kombinasjon med register_globals (som vil lage $INCLUDEERKULT og sette den til 1337) vil utføre koden man skulle vært innlogget får kunne kjøre, benytter man heller

define('INCLUDEERKULT', 1337);
include "login.php";

I login.php

if (defined('INCLUDEERKULT') && INCLUDEERKULT == 1337)
// Her skjer det ting
else
die("Hacking attempted");

som ikke vil være usikkert selv når register_globals er skrudd på.

Lenke til kommentar

som ikke vil være usikkert selv når register_globals er skrudd på.

The more you know ;) Og den koden ovenfor kan jeg vel også legge in en egen .php fil, for deretter å inkludere den? Må bare huske å legge med en ekstra } på slutten? :D

Endret av Noble
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...