Avatar billede gil-galad Nybegynder
03. februar 2004 - 19:15 Der er 19 kommentarer og
1 løsning

inkluderings script problemer

jeg inkludere med dette script her:
<?php
if ($_GET["action"] == "") {
require("1/forside.php");
}
else{
require "1/".$_GET["action"].".php";
}
?>

MEN, nogle filer (som kaldes med "mode" og ikke "action") ligger i en anden mappe (den hedder 2)

hvo'en gür man das?
Avatar billede erikjacobsen Ekspert
03. februar 2004 - 19:18 #1
<?php
if ($_GET["action"] != "") {
  require "1/".$_GET["action"].".php";
} else if ($_GET["mode"] != "") {
  require "2/".$_GET["mode"].".php";
} else {
  require("1/forside.php");
}
?>

MEN du har et sikkerhedsproblem. Tester du ikke indholdet af action/mode
for korrekthed kan ondskabsfulde brugere includere alle filer på dit site,
ved f.x at skrive    ...php?action=../../.htpasswd
Avatar billede gil-galad Nybegynder
03. februar 2004 - 19:30 #2
heldighvis er der ikke så noget... og de sider der ik' må ses, er beskyttet med session login system... Men deeeet
Avatar billede gil-galad Nybegynder
03. februar 2004 - 19:34 #3
ok, slynger du et svar, eller nægter du at modtage points som sædvanlig?
Avatar billede gil-galad Nybegynder
03. februar 2004 - 19:36 #4
kan folk ikke kun cracke/hacke/fuske sig ind på sider der ender på *.php ?
Avatar billede sukos Juniormester
03. februar 2004 - 19:38 #5
Man kan evt. også include en fil fra en helt anden server!
Avatar billede sukos Juniormester
03. februar 2004 - 19:39 #6
Avatar billede erikjacobsen Ekspert
03. februar 2004 - 19:43 #7
De sider du beskytter med session er ikke beskyttet med require. Det er måske en
lille smule bedre når du klistrer .php på, men det er stadig et utilgiveligt
sikkerhedshul.
Avatar billede gil-galad Nybegynder
03. februar 2004 - 19:44 #8
hmmmm kan man ikke lave en
str_replace("http://","","$action");
str_replace("http://www","","$action");
str_replace("www","","$action");
Avatar billede erikjacobsen Ekspert
03. februar 2004 - 19:45 #9
Måske er det bedre, men har du nu fået alt med?
Du bør lave en liste i din php fil over der lovlige navne, og kun tillade hvis
de ligger i listen. Så er du sikker.
Avatar billede gil-galad Nybegynder
03. februar 2004 - 19:45 #10
er de mere beskyttede med include??
jeg har valgt require fordi der er php scipts i nogle af de sider jeg inkludere..
Avatar billede gil-galad Nybegynder
03. februar 2004 - 19:47 #11
det havde jeg også før, men den liste blev nemlig meget lang, og irreterende og rette i. Det var derfor jeg lavede dette nye script
Avatar billede sukos Juniormester
03. februar 2004 - 19:56 #12
Jeg gør det at filer som skal includes, ikke ligger i "web-root", altså ikke kan nås via http
stien til dir'et er så defineret i en include på alle sider

$filepath = "/fuld/sti/til/includedir/";
Avatar billede gil-galad Nybegynder
03. februar 2004 - 19:56 #13
hmmmm Jeg har prøvet og skrive:
http://127.0.0.1/index.php?action=http://spiff.users.whitehat.dk/index
Men den melder fejl og man kan ikke rigtig få den til at hente fra andre sider. Måske er det fordi jeg beder den hente i en anden mappe?
Denne fejl kommer:
Warning: main(1/http://spiff.users.whitehat.dk/index.php): failed to open stream: No such file or directory in c:\apache\htdocs\index.php on line 53

Fatal error: main(): Failed opening required '1/http://spiff.users.whitehat.dk/index.php' (include_path='.;c:\php4\pear') in c:\apache\htdocs\index.php on line 53
Avatar billede gil-galad Nybegynder
03. februar 2004 - 19:56 #14
det gør jeg også!
Avatar billede gil-galad Nybegynder
03. februar 2004 - 20:08 #15
vil det sige det er sikkert??
i kan prøve på min side her http://spiff.users.whitehat.dk hvis i vil teste...
Avatar billede erikjacobsen Ekspert
03. februar 2004 - 20:22 #16
Nej, det er ikke sikkert. Jeg fastholder min kommentar fra 19:45:39
Avatar billede Slettet bruger
03. februar 2004 - 20:34 #17
Jeg plejer at lave et array til den slags.

$liste['forside']='1/forside.php';
$liste['nyheder']='1/nyheder.php';

Så kan man bagefter let gøre således:

$hent=(isset($_GET['action']) && isset($liste[$_GET['action']]))?$liste[$_GET['action']]:$liste['forside'];

Og du kan så udvide med

$hent=(isset($_GET['mode']) && isset($liste[$_GET['mode']]))?$liste[$_GET['mode']]:$hent;

Med mindre din mode og action kan hedde det samme, men skal give forskellige sider.
Avatar billede gil-galad Nybegynder
05. februar 2004 - 15:00 #18
ok smider aller der føler sig moralsk forpligtede, et svar?
Avatar billede Slettet bruger
05. februar 2004 - 15:03 #19
Moralsk forpligtet er nok lidt overdrevet, men skidt.
Avatar billede gil-galad Nybegynder
06. februar 2004 - 17:33 #20
hmm... de andre følte sig nok ikke helt så forpligtede så
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