Gå til innhold

Endre et script


Anbefalte innlegg

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
Videoannonse
Annonse

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 p_edit.gif-knappen i første post for å endre emnetittelen.

 

(Dette innlegget vil bli fjernet ved endring av emnetittel. Ikke kommenter dette innlegget, men p_report.gif gjerne dette innlegget når tittelen er endret, så vil det bli fjernet..)

Lenke til kommentar

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 av Famen
Lenke til kommentar
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 av frisyre
Lenke til kommentar

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 av Famen
Lenke til kommentar
<?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 av harald79
Lenke til kommentar

<?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
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 av OISNOT
Lenke til kommentar

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 av Runar
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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...