Gå til innhold

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


Anbefalte innlegg

Videoannonse
Annonse

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.

Lenke til kommentar

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

Lenke til kommentar
<?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);
}

?>

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

Lenke til kommentar

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

Lenke til kommentar

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 :)

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

Lenke til kommentar

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?

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å
×
×
  • Opprett ny...