frisyre Skrevet 14. august 2008 Del Skrevet 14. august 2008 Hei, jeg har laget en side der index.php inneholder denne koden. <?php include("top.php"); ?> <? if ($_GET['id'] == "") { $page = "home.php"; } else { $page = "id/" . $_GET['id'] . ".php"; } include $page; ?> Alle har sett noe lignende før og vet hva den gjør. Men jeg skulle gjerne gjort en endring jeg ikke får til. Når noen går inn på index.php, inkluderer den top.php og home.php. Det jeg skulle hatt den til å gjøre er når index.php blir besøkt, sender den personen rett til http://www.lol.no/home.php uten noen includes. Likevel skal det andre fungere som det gjør for øyeblikket. Hvis noen forstår mer av dette enn meg ville jeg satt stor pris på hjelp. Takk på forhånd Lenke til kommentar
Jonas Skrevet 14. august 2008 Del Skrevet 14. august 2008 Videresending gjøres vanligvis med HTTP-headers, på følgende måte. header ( 'Location: http://www.lol.no/home.php' ); Lenke til kommentar
frisyre Skrevet 14. august 2008 Forfatter Del Skrevet 14. august 2008 Men det er ikke på den måten jeg trenger det. Lenke til kommentar
Ernie Skrevet 14. august 2008 Del Skrevet 14. august 2008 Neivel, da må du nok forklare litt bedre hva du ønsker Lenke til kommentar
frisyre Skrevet 14. august 2008 Forfatter Del Skrevet 14. august 2008 Ble kanskje verre å formulere det enn jeg så for meg i hodet. Men håper dette beskriver problemet enklere. Kun når man går til klikker på en link som går til index.php skal man komme til http://www.lol.no/home.php Resten av scriptet skal fungere som det gjør, altså at linkene til andre steder (feks. kontaktoss.php) blir http://www.lol.no/?id=kontaktoss Lenke til kommentar
Runar Skrevet 14. august 2008 Del Skrevet 14. august 2008 <?php if( !isset( $_GET['id'] ) ) { include( 'home.php' ); } ?> Koden din er forresten usikker til de grader. Anbefaler deg å ta en titt på de utallige eksisterende include-kodene som ligger rundt om kring på nettet. Lenke til kommentar
Marvil Skrevet 14. august 2008 Del Skrevet 14. august 2008 Emnetittelen i denne tråden er lite beskrivende for trådens innhold og det er derfor ingen god emnetittel. Jo bedre og mer beskrivende emnetittelen er, jo lettere er det for andre å skjønne trådens innhold og det vil være lettere å treffe den riktige forumbrukeren med det rette svaret. Ber deg derfor om å endre emnetittel. Vennligst forsøk å ha dette i tankene neste gang du starter en tråd, og orienter deg om hva vår nettikette sier om dårlig bruk av emnetitler. Husk at en god emnetittel skal beskrive eller oppsummere hvilket problem du har - ikke at du har et problem. En god emnetittel skal heller ikke kun bestå av et produktnavn. Bruk -knappen i første post for å endre emnetittelen. (Dette innlegget vil bli fjernet ved endring av emnetittel. Ikke kommenter dette innlegget, men gjerne dette innlegget når tittelen er endret, så vil det bli fjernet..) Lenke til kommentar
Wackamole Skrevet 14. august 2008 Del Skrevet 14. august 2008 (endret) Tror du må bruke mod_rewrite til det, hvis du hvil at index.php skal redirecte til home.php, eller du kan bruke header ( 'Location:http://www.lol.no/home.php' ); inni i index.php filen. litt usikker på hva du mener, mener du at første gang en bruker kommer inn skal den se index.php, og etterpå når han trykker på en link, skal det komme home.php?id=page? istedenfor index.php?id=page? .. Hilsen Fredrik aka Famen Endret 14. august 2008 av Famen Lenke til kommentar
frisyre Skrevet 15. august 2008 Forfatter Del Skrevet 15. august 2008 (endret) Tror du må bruke mod_rewrite til det, hvis du hvil at index.php skal redirecte til home.php, eller du kan bruke header ( 'Location:http://www.lol.no/home.php' ); inni i index.php filen. litt usikker på hva du mener, mener du at første gang en bruker kommer inn skal den se index.php, og etterpå når han trykker på en link, skal det komme home.php?id=page? istedenfor index.php?id=page? .. Hilsen Fredrik aka Famen Nesten bortsett fra at første gang en bruker kommer til index.php skal han ikke engang se den, bare bli sendt rett til /home.php. Og etterpå han trykker skal det komme: index.php?id=page. (ikke home.php?=id ....) NB! Det er KUN når han går tilbake til index.php at han skal komme til /home.php. Er dette i det hele tatt mulig? Virker som jeg har et håpløst prosjekt på gang. Endret 15. august 2008 av frisyre Lenke til kommentar
Wackamole Skrevet 15. august 2008 Del Skrevet 15. august 2008 (endret) det er mulig, men jeg tror du gjør det litt vannskliere enn det det egentlig er... 1. Hvorfor skal du redirecte index.php filen til home.php når du kan bruke include scriptet i index.php filen? <?php include("top.php"); ?> <?php //Tar bort alle / og \ for sikkerhetens skyld. $incpage = stripslashes($_GET['id']); //Her kan du endre hvilken fil som skal vises når man kommer in på siden. $home = "home"; //Hvis id ikke er satt, hvis $home variabelen. if(!isset($_GET['id'])) { $page = "id/$home.php"; } //Hvis filen i $incpage ikke eksisterer inkluder error.php filen elseif(!file_exists("id/".$incpage.".php")) { $page = "id/error.php"; } //Hvis filen eksistere og id er satt, hvis filen som er i id. else { $page = "id/$incpage.php"; } //Her blir siden inkludert, denne kan du sette hvor som helst på siden :) include_once($page); ?> EDIT: ny kode, testet og fungerer. Endret 15. august 2008 av Famen Lenke til kommentar
Harald B Skrevet 15. august 2008 Del Skrevet 15. august 2008 (endret) <?php include("top.php"); ?> <? $incpage = $_GET['id']; $incpage .= stripslashes($incpage); if($incpage == '') { $page = 'home'; }else { $page = "id/$incpage.php"; } include $page; ?> utestet. Makan til usikker kode... Du må ikke anbefale sånt. Utrolig hvor mange som tror at det er nok å legge til .php på slutten av filnavnet for å hindre file include exploits. Problemet her er ikke bare directory traversal slik at alle php filer kan inkluderes. Problemet her er at alle filer på hele serveren kan inkluderes. Årsaken er at php er programmert i C. I C er det kort fortalt slik at strenger avsluttes med en null byte. Ettersom php godtar null byte i sine strenger er det mulig for oss å injisere den i $incpage variabelen ovenfor. Resultatet kan se slik ut i php: $page = "id/../etc/passwd\0.php"; Men pga at C avslutter sine strenger med null byte vil C kun se dette: "id/../etc/passwd" Siden php er programmert i C vil funksjonen include() (som altså er programmert i C) kun se filnavnet "id/../etc/passwd" og inkludere denne filen i skriptet ditt. EDIT: Forumet filtrerte \0 fra innlegget mitt. Endret 15. august 2008 av harald79 Lenke til kommentar
Wackamole Skrevet 15. august 2008 Del Skrevet 15. august 2008 (endret) Tusen takk harald, det viste jeg ikke... uansett.. kan jeg bruke stripcslashes da? i tilegg til stripslashes? sikkert lurt og bruke strip_tags også Endret 15. august 2008 av Famen Lenke til kommentar
Ernie Skrevet 15. august 2008 Del Skrevet 15. august 2008 strip©slashes vil ikke utgjøre noen forskjell. Den vil bare fjerne escapingen, ikke legge den til. addslashes vil derimot fungere bedre. Lenke til kommentar
Wackamole Skrevet 15. august 2008 Del Skrevet 15. august 2008 <?php include("top.php"); ?> <?php //Tar bort alle / og \ for sikkerhetens skyld. $incpage = stripslashes($_GET['id']); $incpage .= addslashes($incpage); $incpage .= strip_tags($incpage); //Her kan du endre hvilken fil som skal vises når man kommer in på siden. $home = "home"; //Hvis id ikke er satt, hvis $home variabelen. if(!isset($_GET['id'])) { $page = "id/$home.php"; } //Hvis filen i $incpage ikke eksisterer inkluder error.php filen elseif(!file_exists("id/".$incpage.".php")) { $page = "id/error.php"; } //Hvis filen eksistere og id er satt, hvis filen som er i id. else { $page = "id/$incpage.php"; } //Her blir siden inkludert, denne kan du sette hvor som helst på siden :) include_once($page); ?> vet ikke om den sikkerhet greia som er endret nå fungerer, Ernie du er flink med, rett på det hvis det er feil og du gidder Lenke til kommentar
OISNOT Skrevet 15. august 2008 Del Skrevet 15. august 2008 (endret) KISS. Istedenfor index.php?id=home burde du bare bruke home.php direkte. Inkluder top.php eller.no i toppen av hver av de filene med require_once. Endret 15. august 2008 av OISNOT Lenke til kommentar
Jonas Skrevet 15. august 2008 Del Skrevet 15. august 2008 KISS.Istedenfor index.php?id=home burde du bare bruke home.php direkte. Inkluder top.php eller.no i toppen av hver av de filene med require_once. Dummeste jeg har hørt noen sinne. Tror nesten ikke det jeg leser. Lenke til kommentar
OISNOT Skrevet 15. august 2008 Del Skrevet 15. august 2008 (endret) Dummeste jeg har hørt noen sinne. Tror nesten ikke det jeg leser. Det er dummere å bruke http://site/home.php enn (usikker) http://site/index.php?id=home ? Endret 15. august 2008 av OISNOT Lenke til kommentar
Wackamole Skrevet 15. august 2008 Del Skrevet 15. august 2008 hva er det som er mer usikkert med det? inkluderer jo samme fila! Lenke til kommentar
OISNOT Skrevet 15. august 2008 Del Skrevet 15. august 2008 (endret) hva er det som er mer usikkert med det? inkluderer jo samme fila! Det var implementasjonen som var usikker... Anyways, det trådstarter til slutt ville var å vise home.php med top.php først. Hvorfor gjøre ting komplisert... Endret 15. august 2008 av OISNOT Lenke til kommentar
Runar Skrevet 15. august 2008 Del Skrevet 15. august 2008 (endret) Hva om vi bare gjør et par små forandringer på koden til trådstarter? <?php if( !isset( $_GET['id'] ) ) { include( 'home.php' ); } else { include( 'top.php' ); include( 'id/' . $_GET['id'] . '.php' ); } ?> Nå vil top.php kun inkluderes hvis id er satt. Merk at koden er høyst usikker, men trådstarter får selv sikre den hvis han ønsker å benytte seg av slike primitive metoder. Endret 15. august 2008 av Runar Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå