Avatar billede alta Nybegynder
28. marts 2003 - 13:50 Der er 18 kommentarer og
1 løsning

Sikkerhed kontra beværlighed?

Flere steder her på eksperten.dk kan man læse, at det ikke altid er sikkert, at bruge formen: index.php?side=noget&variable=andet, især hvis man også bruger sessions.

Er der nogen der kan fortælle mig, om man så i stedet bør include top og bund på alle sine sider eller, om man kan komme udenom de evt. sikkerhedsproblmer med den første metode?

Det smarte ved den første metode er vel, at man kun skal bekymre sig om indholdet i modsætning til include-modellen altid skal include mauelt, når man opretter en side, eller hva?
Avatar billede Slettet bruger
28. marts 2003 - 14:40 #1
index.php?side=noget&variable=andet <--- ser jeg skam ikke noget problem i såfremt du behandler dine variabler forsvarligt.
DVS. undgå SQL insert mm.
f.eks.
$side = addslashes($_GET[side]);
$variable = addslashes($__GET[variable]);
Avatar billede fangel Nybegynder
28. marts 2003 - 14:42 #2
her kan du læse om hvorfor det er usikkert...
http://www.showsource.dk/artikler/vis_artikel.php?id=104316980

Morten
Avatar billede exp Juniormester
28. marts 2003 - 14:44 #3
Du er her: Forsiden - artikler - vis_artikel.php?id=104316980

Artiklen findes desværre ikke!
Men prøv fra artikel-index
Avatar billede fangel Nybegynder
28. marts 2003 - 14:44 #4
regin, som der i den artikel jeg linker til står, så er include($_GET['side']) altid usikker, da man på en linux masine bare vil kunne skrive fx

?side=/etc/httpd/httpd.comf

og så har du ligepludselig konfigurationen af apache serveren, ik' så sejt, vel?

Morten
Avatar billede fangel Nybegynder
28. marts 2003 - 14:44 #5
hov, kig lige dræbt et tal... her er det rigtige link..
http://www.showsource.dk/artikler/vis_artikel.php?id=1043169805
Avatar billede webmasterdk Praktikant
28. marts 2003 - 15:18 #6
ellers har apache en funktion indbygget, der gør at filerne HEADER og en ande jg ikke helt kan huske hvad hedder inkluderes automatisk på alle sider i toppen og bunden...
Avatar billede Slettet bruger
28. marts 2003 - 15:44 #7
dea_pg >> I det tilfælde kan man bare lave et array over de filer brugeren må besøge og så teste om filen er i det givne array!
Avatar billede fangel Nybegynder
28. marts 2003 - 15:50 #8
ja... lige præcist det man skal...
Avatar billede xyborx Nybegynder
28. marts 2003 - 15:56 #9
Hvis de filer man vil include altid ligger i den samme mappe, så kan man vel bare fjerne alle skråstreger og punktummer fra variablen:
if(isset($_GET['side']))
{
    $side='./mine_sider/'.str_replace(array('\\','/','.'),'',$_GET['side']);
    include($side);
}
Avatar billede fangel Nybegynder
28. marts 2003 - 15:59 #10
xyborg => og hvad nu hvis man vil inkludere filen "./pages/main.php" ?... holder jo ik' så godt, vel?

Morten
Avatar billede sukos Juniormester
28. marts 2003 - 16:34 #11
Avatar billede alta Nybegynder
28. marts 2003 - 16:34 #12
Hvis man nu bruger den "besværlige" med at include top/bund på alle sider, er der så alligevel en nem måde at gøre det på, eller skal man igang med hver eneste side?


dea_pg >> virkelig god artikel, tak :-)
Avatar billede alta Nybegynder
28. marts 2003 - 16:44 #13
Det samme kan jeg jo sige til dig, sukos; virkelig god artikel ;-)
Avatar billede xyborx Nybegynder
28. marts 2003 - 18:34 #14
dea_pg> Det fungerer da fint på min egen hp.. Man har en eller flere hovedfiler (fx ./index.php) som holder styr på alt det overordnede (design, database etc), samt finder ud af hvilken side læseren vil se og inkluderer den fra fx ./mine_sider/<sidenavn>.inc.php. Ved brug af ovenstående eksempel, kan læseren ikke få fat i filer udenfor ./mine_sider/
Avatar billede fangel Nybegynder
28. marts 2003 - 19:45 #15
xyborx => korrekt, sådan kunne det self. laves...
Avatar billede alta Nybegynder
28. marts 2003 - 20:02 #16
Jeg synes både artiklen var god og xyborx svar anvendeligt, så tak for hjælpen. Er der flere smider der et svar, ellers går de 30 til xyborx...
Avatar billede xyborx Nybegynder
31. marts 2003 - 10:17 #17
Det kunne endda gøres mere avanceret: http://www.eksperten.dk/spm/334733

$side=str_replace(array('\\','/','.'),'',$_GET['side']);
$side_fil='./mine_sider/'.$side;
if(!is_file($side_fil))
{
    header('Status: 404 Not Found');
    echo 'Siden '.htmlentities($side).' findes ikke';
}
elseif(!@include($side_fil))
{
    header('Status: 500 Internal Server Error');
    echo 'Siden '.htmlentities($side).' indeholder programmeringsfejl';
}
else
{
    // Success: Her kunne man fx logge besøget
}
Avatar billede fangel Nybegynder
31. marts 2003 - 14:48 #18
i tilfælde af at du vil bruge mit svar til noget... så her...

xyborx => læg mærke til at header("Status: ******"); kun virker med PHP som et Apache modul... ;)

Morten
Avatar billede alta Nybegynder
01. april 2003 - 09:47 #19
>> dea_pg: sorry, har glemt alt om det. Jeg brugte faktisk dit forslag så du løber med pointene.

Tak til alle for forslag og indlæg.
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