Avatar billede emureactor Nybegynder
22. marts 2003 - 17:12 Der er 9 kommentarer og
1 løsning

Hjælp til sikkerhed!

Hejsa, jeg har skrevet tidligere på dagen også men vender hermed tilbage fordi det fik jeg ikk rigtig fat i.

Anwyway, jeg har følgende funktion:

if (!$page) {
include("fil.php");
include("/anden-fil.php");
} else {
include($page);
}

I praksis kommer linket til at se sådan her ud:

index.php?page=side.php

Men en besøgende fik beskrevet for mig hvor let funktionen kunne misbruges til at skaffe passwords osv fra min side.
Det han havde gjort var at skrive index.php?page=hans.domæne.com/script.php (hvor script.php bestod af et script der kunne fortælle oplysninger om min mappestruktur osv. Således kunne han hacke mig bagefter hvis han ville.

Det jeg leder efter her er et konkret svar på hvordan man i denne her funktion kan indbygge sådan at man at under ingen omstændigheder kan misbruge det

Jeg forestiller mig noget a'la en funktion der tjekker at alt efter ?page= ikke kan være en http url, eller at man har en liste med ok sider den kan tage og hvis ikke den står i "ok" listen så melder den fejl.

Jeg aner intet om php - måske du har svaret ! Det blir godt belønnet da det er et seriøst problem jeg har!
Avatar billede schaefner Juniormester
22. marts 2003 - 17:18 #1
For det første bør du tjekke om filen findes:

if (!$page) {
  include("fil.php");
  include("/anden-fil.php");
} else {
  if (file_exists($_GET['page'])) {
    include($page);
  } else {
    echo "Filen findes ikke";
  }
}
Avatar billede schaefner Juniormester
22. marts 2003 - 17:20 #2
For det andet bør du også tjekke på filnavnet for at undgå at inkluderer nogle filer med fortrolige oplysninger.
Avatar billede schaefner Juniormester
22. marts 2003 - 17:24 #3
Du kunne eventuelt også gøre således:
if (!isset($_GET['page'])) {
  include("fil.php");
  include("/anden-fil.php");
} else {
  if (file_exists($_GET['page'].".php")) {
    include($_GET['page'].".php");
  } else {
    echo "Filen findes ikke";
  }
}
Så kan der kun inkluderes php-filer

Og så laver du dine link således: ?page=forside
Avatar billede schaefner Juniormester
22. marts 2003 - 17:29 #4
Når du så laver dine links således: "?page=forside" så vil forside.php blive inkluderet.
Hvis en person, så f.eks. skriver:
?page=../hemmeligfil.txt så vil den blive lavet om til hemmeligfil.txt.php og vil så melde at filen ikke eksisterer.
Avatar billede sukos Juniormester
22. marts 2003 - 17:34 #5
jahh, sikrest er jo nok at lave et array() med navne på de filer du vil bruge, og derefter tjekke om navnet findes:
<?php
$filer = array("side1", "side2", "side3"); //kan også ændres til at læse et dir igennem for filer i stedet, så det bliver "dynamisk"
if (isset($_GET["page"]) && in_array($_GET["page"], $filer)) {
include($_GET["page"] .".php");
}
?>
Avatar billede schaefner Juniormester
22. marts 2003 - 17:38 #6
ja, sukos' eksempel kan også sagtens bruges ;)
Avatar billede emureactor Nybegynder
22. marts 2003 - 18:17 #7
men man kan ikke køre remote så ? dvs. andre kan ikke installere deres egne scripts og så at sige køre deres scripts på min index.php?page= `?
Avatar billede emureactor Nybegynder
22. marts 2003 - 18:22 #8
Sukos: din er meget god men min side kommer til at bestå af mange mange sider, og hva hvis siderne har samme navn men ligger i forskellige biblioteker?
Avatar billede schaefner Juniormester
22. marts 2003 - 22:30 #9
emuractor >> Nej, du vil ikke kunne køre eksterne-filer.
Avatar billede emureactor Nybegynder
23. marts 2003 - 10:45 #10
smukt...
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