Gå til innhold

Spørsmål ang. href og targeting (index.php?side=)


Anbefalte innlegg

Skrevet

Hei,

 

Er det noen her som kan forklare meg hvordan dette med (index.php?side=) fungerer?

og hvorfor linkene på siden her ikke fungerer: http://krilar.freehostia.com/steffan/ ??

 

 

 

 

 

(Ps. Det er ikke min side, Jeg har bare kopiert siden for å prøve å lære meg noen småting. den vil bli slettet fra serveren når jeg har funnet ut dette.)

 

 

På forhånd takk :)

Videoannonse
Annonse
Skrevet (endret)

Hadde vært fordelaktig med PHP-koden din.

 

Forøvrig trenger du ikke target="_self" i det hele tatt siden den vil åpne seg i samme vindu.

Endret av LoS
Skrevet

Vet du i det hele tatt hva dette er?

 

Når du sikter til en php fil i en web browser kan du legge med variabler ved å skrive dem inn etter et spørsmålstegn separert av &

www.webside.no/fil.php?variabel=verdi&variabel2=endaEnVerdi

Så det er php scriptet i index.php som bestemmer hva som gjøres med variablen. F.eks. inkludere en fil i siden.

Skrevet

er det ingen måte å finne dette ut på?

 

Er det noen som har en link til hvor jeg kan lese om dette?

gjerne lyst til å ha det på min egen side.

Skrevet (endret)

http://www.tizag.com/phpT/postget.php

 

Du kan ordne en slik link

<a href="?page=about">About me</a>

 

Så kan du sette inn følgende PHP script i "content" delen av sida di (en div tag med ID="content" eller noe slikt)

<?php
// Sjekker om variablen "page" finnes. Hvis den finnes så 
// inkluderer vi en php fil med verdien til "page" som filnavn 
// fra mappen "pages"
if($_GET['page']) {
	include("pages/" . $_GET['page'] . ".php");
}
?>

Endret av dahwan
Skrevet
<?php
// Sjekker om variablen "page" finnes. Hvis den finnes så 
// inkluderer vi en php fil med verdien til "page" som filnavn 
// fra mappen "pages"
if($_GET['page']) {
	include("pages/" . $_GET['page'] . ".php");
}
?>

Og hva skjer da hvis slemme kåre skriver

sårbarside.no/index.php?page=../../etc/passwd%00 :ohmy:

Skrevet
<?php

// Sjekker om variablen "page" finnes. Hvis den finnes så 
// inkluderer vi en php fil med verdien til "page" som filnavn 
// fra mappen "pages"

if($_GET['page']) {
$files = glob('pages/*');
$filename = $_GET['page'] . '.php';
if (in_array($filename, $files)) include("pages/" . $filename);
}

?>

Skrevet
<?php

// Sjekker om variablen "page" finnes. Hvis den finnes så 
// inkluderer vi en php fil med verdien til "page" som filnavn 
// fra mappen "pages"

if($_GET['page']) {
$files = glob('pages/*');
$filename = $_GET['page'] . '.php';
if (in_array($filename, $files)) include("pages/" . $filename);
}

?>

 

hva gjorde du nå? fatter ikke dette helt :p helt ny med php :(

 

Men hva er det jeg trenger å skrive inn i denne?

Skrevet (endret)

<?php

// Sjekker om variablen "page" finnes. Hvis den finnes så
// inkluderer vi en php fil med verdien til "page" som filnavn
// fra mappen "pages"

if($_GET['page']) {
// $files er et array med filnavn funnet i 'pages/*'
$files = glob('pages/*');

// $filename er hentet fra url:
// (http://www.example.com/index.php?page=about)
// i eksempelets tilfelle: $filename = 'about.php'
$filename = $_GET['page'] . '.php';

// her sjekkes det om $filename finnes i $files
// dette hindrer noen i å skrive inn ../../ for å
// få tilgang til filer utenfor pages/ området
if (in_array($filename, $files)) include("pages/" . $filename);
}

?>

 

en enkel måte å få litt innblikk i hvordan $_GET fungerer er å lage en side som kun inneholder:

<pre>
<?php
print $_SERVER['QUERY_STRING'] . "\n\n";
print_r($_GET);
?>
</pre>

 

så kan du eksprementere med denne siden ved å skrive inn url med ? bak fulgt av en såkalt query string i form av: variabel1=verdi1&variabel2=verdi2&variabelN=verdiN

 

print_r($input) printer en tekst-representasjon av input. praktisk hvis du vil ta en titt på et array eller et objekt.

 

eksempel:

<pre>
<?php
class testClass {
public $testVar = 'blabla';
public $testArray = array('bla', 'bla2', 'bla3');

public function printR() {
	print_r($this);

}
}

$t = new testClass;


// disse to linjene gjør det samme
print_r($t);
$t->printR();
?>
</pre>

Endret av grimjoey
Skrevet (endret)
<?php
 // Sjekker om variablen "page" finnes. Hvis den finnes så 
 // inkluderer vi en php fil med verdien til "page" som filnavn 
 // fra mappen "pages"
 if($_GET['page']) {
	 include("pages/" . $_GET['page'] . ".php");
 }
?>

Og hva skjer da hvis slemme kåre skriver

sårbarside.no/index.php?page=../../etc/passwd :ohmy:

 

Hæ?

 

Scriptet legger jo til .php på slutten av filnavnet.

Du kan jo fikse det slik at alle sidene i /pages har filformatet .page eller whatever. Dermed vil scriptet legge til .page bak variablen i adresselinja og brukere vil ikke få adgang til .php filer.

Endret av dahwan
Skrevet
Scriptet legger jo til .php på slutten av filnavnet.

Du kan jo fikse det slik at alle sidene i /pages har filformatet .page eller whatever. Dermed vil scriptet legge til .page bak variablen i adresselinja og brukere vil ikke få adgang til .php filer.

 

Tror du må studere posten min litt mer nøye. Legg merke til %00. Deretter googler du "zero byte poisoning".

 

Kort fortalt er php selv programert i C. I C fungerer det slik at en streng avsluttes med en null byte. Dette gjør at dersom vi kan injisere en null byte i en streng i php, vil funksjoner som include kaste alt som står etter denne. Det holder altså ikke å legge til .php eller .txt etter filnavnet slik du har gjordt i posten din.

Skrevet

Hei, har funnet et script, er ikke sikker, men tror det skal gjøre siden mer sikker..

 

Men så var det hvordan jeg bruker d, hmm noen som gidder å se på det?

 

$allowed_pages = array('hjem', 'om-meg', 'kontakt', 'tull', 'ball'); //Godkjente sider, for å sikre at man ikke kan inkludere filer som kan skade på noe måte

$page = (!empty($_GET['page'])) ? $_GET['page'] : $allowed_pages[0]; // Bruker Get-variabelen "page", hvis den er tom går vi ut i fra at første verdi i $allowed_pages er startsiden

if(in_array($page, $allowed_pages)) {
  include($page . ".php"); // Hvis siden finnes henter vi den
} else {
  include("404.php"); // Hvis ikke henter vi en 404-side
} 

 

Jeg har fått til alt utenom dette med: "// Bruker Get-variabelen "page", hvis den er tom går vi ut i fra at første verdi i $allowed_pages er startsiden"

 

det fører til at den laster index filen i en loop, : http://otto87.freehostia.com/test/

 

slik ser det ut nå under $allowed_pages:

 

<?php
$allowed_pages = array('index', 'om', 'om2', 'om3', 'ball'); //Godkjente sider, for å sikre at man ikke kan inkludere filer som kan skade på noe måte
?>

 

Noen forslag?

 

På forhånd, tusen takk :)

Skrevet

Index.php er ikke startsiden din. Med scriptet du bruker, er det en side alt vises fra. Gjør som eksempel-koden forslår, og opprett en hjem-side.

Skrevet
Index.php er ikke startsiden din. Med scriptet du bruker, er det en side alt vises fra. Gjør som eksempel-koden forslår, og opprett en hjem-side.

 

Takk, der funka det.

 

men lurte på en ting til, hvordan gjør jeg det hvis jeg skal hente en side utenfra (http://otto87.blogg.no/) og inkludere den med dette scriptet, må jeg gjøre noe spesielt eller?

Skrevet
jeg er usikker om include støtter ekstern uri. alternativt kan du gjøre slik:

 

print file_get_contents('http://otto87.blogg.no');

 

?

 

sorry men jeg er helt grønn når d kommer til php :S

Skrevet

ok, bare glem den siste der, valgte å ikke bruke bloggen.

 

Men har et annet problem, hvis jeg åpner siden og trykker på en link, så blir det åpnet en ny side, og fra den funker alle linkene i et vindu, men ikke i det første: http://otto87.freehostia.com/

 

php koden jeg bruker er denne:

 

<?php
$allowed_pages = array('start', 'om_meg', 'galleri', 'blog', 'sammarbeid', 'kontakt'); //Godkjente sider, for å sikre at man ikke kan inkludere filer som kan skade på noe måte

$side = (!empty($_GET['side'])) ? $_GET['side'] : $allowed_pages[0]; // Bruker Get-variabelen "page", hvis den er tom går vi ut i fra at første verdi i $allowed_pages er startsiden

if(in_array($side, $allowed_pages)) {
  include($side . ".php"); // Hvis siden finnes henter vi den
} else {
  include("404.php"); // Hvis ikke henter vi en 404-side
} 
?>

 

noen som har noen forslag til dette?

Skrevet

Her er et lite script jeg har laget i PHP. Klikky

 

Scriptet består bare av en fil (index.php) og flere template-filer i Smarty. Scriptet bestemmer hva som skal vises ut ifra hva som står i URLen.

 

?side=hjem viser forsiden

?side=bibliotek viser linkbibliotektet osv.

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...