/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
include efter url?
Fra : jeppe


Dato : 14-05-06 12:14

Hej grubbe..
Php er ikke det jeg er mest kendt i, men håber i vil hjælpe
afligevel..

Det jeg skal havde hjælp til er at Include en side efter URL'en..

Altså fx hvis url'en er www.minside.dk/side.php?page=side2
så vil side2 blive include..?
Ved faktisk ikke om man kan dette i php ?? Men ved at man kan i
asp..

I asp vil koden se sådan her ud:
<%
side = Request.Querystring("page")
if side = "" Then
side = "Forside" 'default indhold hvis intet er specifiseret
end if
Server.Execute(side & ".asp")
%>

Håber i kan hjælpe mig..

mvh Jeppe

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Bertel Lund Hansen (14-05-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 14-05-06 12:55

jeppe skrev:

> Det jeg skal havde hjælp til er at Include en side efter URL'en..

> Altså fx hvis url'en er www.minside.dk/side.php?page=side2
> så vil side2 blive include..?

$page=$_GET['page'];

if (isset($page) && $page>'') include $page.'.inc';
else include 'standard.inc';

Der er så ikke lavet noget tjek på om den kaldte fil eksisterer,
men værre er det at man åbner for at folk inkluderer en
vilkårlig fil på internettet!

Jeg bruger en metode hvor jeg laver et array med de filer der må
inkluderes, og så tester jeg om $page er én af dem, og i modsat
fald inkluderer jeg forsiden.

Det ser sådan ud:

<?
   include 'filenamearray.php';
   $code='index';   $title=$sider[$code];
   $order=$_GET['page'];
   if (isset($sider[$order])) { $code=$order; $title=$sider[$order]; }
   $content=$code.'.inc';
?>

Det er linje 4 der tjekker om der er en post i arrayet som svarer
til den parameter der kom med URL'en.

filenamearray.php er en separat fil, men den kunne sådan set godt
stå i koden. Jeg bruger den bare flere steder. Den er opbygget således:

<?
$sider = array (
   'index' => 'Forside',
   'skraekeksempler' => 'Skrækeksempler',
   'sprogkritik' => 'Sprogkritik',
);
?>

Der er to sammenhørende elementer i mit array fordi det første er
filnavnet (minus efternavn), og det andet er den tilsvarende
overskrift.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Henrik Stidsen (14-05-2006)
Kommentar
Fra : Henrik Stidsen


Dato : 14-05-06 13:04

jeppe was thinking very hard :
> Altså fx hvis url'en er www.minside.dk/side.php?page=side2
> så vil side2 blive include..?

Det kan man godt men man skal passe gevaldigt på ikke at lave et kæmpe
sikkerhedshul når man gør det.

> Ved faktisk ikke om man kan dette i php ?? Men ved at man kan i
> asp..

Regn med at alt hvad du kan i klassisk ASP kan du også i PHP.

> I asp vil koden se sådan her ud:
> <%
> side = Request.Querystring("page")
> if side = "" Then
> side = "Forside" 'default indhold hvis intet er specifiseret
> end if
> Server.Execute(side & ".asp")
> %>

<?php
$side = "forside";
if(isset($_GET["side"] && $_GET["side"] != "")
{
$side = $_GET["side"];
}

$side = addslashes($side);
include($side . ".php");
?>

Uden garanti af nogen slags - specielt er jeg ikke sikker på kontrol af
input er god nok.

--
Henrik Stidsen - http://henrikstidsen.dk/
"To be or not to be. That's not really a question." - Jean-Luc Godard



Ralle (14-05-2006)
Kommentar
Fra : Ralle


Dato : 14-05-06 14:33

Jeg ville gøre følgende:

lave filen side.php i den putter du:

<?php

$url = $_GET['page];
if (file_exists($url.'.php')) include($url.'.php');
else die('That File Dosent Existed...');

?>

lave så filen forside.php og i den putter du føgende:

<?php


if (!eregi("side.php", $_SERVER['PHP_SELF'])) {
   die ("You can't access this file directly...");
}

//Sidens inhold herunder!

?>

Ralle

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Ralle (14-05-2006)
Kommentar
Fra : Ralle


Dato : 14-05-06 14:36

Glemte at tilføje noget, når du så skal se filen forside.php kan
du ikk gå ind på www.minside.dk/mappen/forside.php for så vil den
skrive: You can't access this file directly...

Så derfor skal du gå ind på
www.dinside.dk/mappen/side.php?page=forside og så vil du se
forsidens indhold...

> Jeg ville gøre følgende:
>
> lave filen side.php i den putter du:
>
> <?php
>
> $url = $_GET['page];
> if (file_exists($url.'.php')) include($url.'.php');
> else die('That File Dosent Existed...');
>
> ?>
>
> lave så filen forside.php og i den putter du føgende:
>
> <?php
>
>
> if (!eregi("side.php", $_SERVER['PHP_SELF'])) {
>    die ("You can't access this file directly...");
> }
>
> //Sidens inhold herunder!
>
> ?>
>
Ralle

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Henrik Stidsen (14-05-2006)
Kommentar
Fra : Henrik Stidsen


Dato : 14-05-06 14:58

Ralle wrote on 14-05-2006 :
> $url = $_GET['page];
> if (file_exists($url.'.php')) include($url.'.php');
> else die('That File Dosent Existed...');

Udemærket løsning - men husk check på input. Altid check på input.

--
Henrik Stidsen - http://henrikstidsen.dk/
"Frisbeetarianism is the belief that when you die, your soul goes up on
the roof and gets stuck." - George Carlin



Bertel Lund Hansen (14-05-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 14-05-06 16:01

Henrik Stidsen skrev:

> Uden garanti af nogen slags - specielt er jeg ikke sikker på kontrol af
> input er god nok.

Der er jo slet ingen kontrol af input, så du kan være sikker på
at det ikke er godt nok.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Henrik Stidsen (14-05-2006)
Kommentar
Fra : Henrik Stidsen


Dato : 14-05-06 18:36

Bertel Lund Hansen laid this down on his screen :
>> Uden garanti af nogen slags - specielt er jeg ikke sikker på kontrol af
>> input er god nok.

> Der er jo slet ingen kontrol af input, så du kan være sikker på
> at det ikke er godt nok.

Ahhh, du overså da vist en addslashes ;)

--
Henrik Stidsen - http://henrikstidsen.dk/
This is not an automated signature. I type this in to the bottom of
every message.



Bertel Lund Hansen (15-05-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 15-05-06 05:28

Henrik Stidsen skrev:

>> Der er jo slet ingen kontrol af input, så du kan være sikker på
>> at det ikke er godt nok.

> Ahhh, du overså da vist en addslashes ;)

Det har du ret i - men jeg vil stadig anbefale den helt sikre
metode jeg bruger.

Og addslashes() kan vel ødelægge HTML-indholdet i en legal fil?

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Peter Brodersen (15-05-2006)
Kommentar
Fra : Peter Brodersen


Dato : 15-05-06 16:06

On Mon, 15 May 2006 06:27:57 +0200, Bertel Lund Hansen
<nospamfilius@lundhansen.dk> wrote:

>> Ahhh, du overså da vist en addslashes ;)
>
>Det har du ret i - men jeg vil stadig anbefale den helt sikre
>metode jeg bruger.

Plus at addslashes() på ingen måde ændrer et input i stil med:
http://www.eksempel.dk/ondtscript

addslashes() har intet at gøre i det her tilfælde, og skaber blot
forvirring og ugennemsigtighed - og måske endda en tro på at scriptet
ikke indeholder et stort sikkerhedshul, for "der bruges en eller anden
funktion, som vist nok har noget med sikring af input at gøre".

>Og addslashes() kan vel ødelægge HTML-indholdet i en legal fil?

Nej, idet \ ikke har nogen relevant betydning i HTML. Følgende er helt
gyldigt:
   <span title="foo\">

Dog, htmlspecialchars() er den rette at bruge, hvis brugeren indtaster
foo" og dette skal serveres som værdi:
   <span title="foo&quot;">

Bruger man i stedet addslashes(), bliver outputtet:
   <span title="foo\"">
hvilket så er ugyldigt. Det skal sammenholdes med hvis man ikke
behandler dataen, hvor outputtet så vil være:
   <span title="foo"">
hvilket ligeledes er ugyldigt. Så addslashes() vil her ikke gøre fra
eller til om outputtet er gyldigt.

Men derudover bliver inputtet i det her tilfælde slet ikke bliver
outputtet på siden, men snarere har betydning for en serverside-logik.

--
- Peter Brodersen
Ugens værktøj - Find vej: www.findvej.dk

123 (14-05-2006)
Kommentar
Fra : 123


Dato : 14-05-06 16:54

> Det jeg skal havde hjælp til er at Include en side efter URL'en..
> Altså fx hvis url'en er www.minside.dk/side.php?page=side2
> så vil side2 blive include..?

Jeg gør det altid så simpelt som muligt:

// Validering af input
$page = substr(trim(strip_tags($_GET["page"])),0,4);

// Inkluder kun een af dine egne sider
switch($page)
{
case "side1" : include("side1.php"); break;
case "side2" : include("side2.php"); break;
case "side3" : include("side3.php"); break;
default : include("index.php");
}



jeppe (14-05-2006)
Kommentar
Fra : jeppe


Dato : 14-05-06 19:47

Okay..

Mange tak for hjælpen alle sammen ;)

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

jamen (16-05-2006)
Kommentar
Fra : jamen


Dato : 16-05-06 16:19

123 wrote:
> Jeg gør det altid så simpelt som muligt:
>
> // Validering af input
> $page = substr(trim(strip_tags($_GET["page"])),0,4);
>
> // Inkluder kun een af dine egne sider
> switch($page)
> {
> case "side1" : include("side1.php"); break;
> case "side2" : include("side2.php"); break;
> case "side3" : include("side3.php"); break;
> default : include("index.php");
> }

Det kan vel gøres mere simpelt. Din switch-case gør, man ikke kommer
igennem med andet input end "sidex". Dvs din substr, trim og strip_tags
ikke øger sikkerheden på nogen måde, men gør kun scriptet mere komplekst

123 (17-05-2006)
Kommentar
Fra : 123


Dato : 17-05-06 12:15

>> Jeg gør det altid så simpelt som muligt:
>>
>> // Validering af input
>> $page = substr(trim(strip_tags($_GET["page"])),0,4);
>>
>> // Inkluder kun een af dine egne sider
>> switch($page)
>> {
>> case "side1" : include("side1.php"); break;
>> case "side2" : include("side2.php"); break;
>> case "side3" : include("side3.php"); break;
>> default : include("index.php");
>> }
>
> Det kan vel gøres mere simpelt. Din switch-case gør, man ikke kommer
> igennem med andet input end "sidex". Dvs din substr, trim og strip_tags
> ikke øger sikkerheden på nogen måde, men gør kun scriptet mere komplekst

Uanset hvad er det altid (synes jeg) en god idé, at begrænse inputtet mest
muligt. F.eks. kan der være en bug i en PHP kommando der gør, at den udføre
buffer overflow eller lignende. Endvidere sikre det også, hvis man sidenhen
ændre i koden og glemmer at man ikke har valideret inputtet.



Palle Hansen (17-05-2006)
Kommentar
Fra : Palle Hansen


Dato : 17-05-06 13:03

123 wrote:
>>>Jeg gør det altid så simpelt som muligt:
>>>
>>>$page = substr(trim(strip_tags($_GET["page"])),0,4);

> Uanset hvad er det altid (synes jeg) en god idé, at begrænse inputtet mest
> muligt. F.eks. kan der være en bug i en PHP kommando der gør, at den udføre
> buffer overflow eller lignende.

Hvis du tager et muligt buffer overflow med i dine overvejelser, så skal
du nok ikke køre inputtet gennem to funktioner før du klipper strengen

123 (17-05-2006)
Kommentar
Fra : 123


Dato : 17-05-06 13:06

>>>>$page = substr(trim(strip_tags($_GET["page"])),0,4);
>
>> Uanset hvad er det altid (synes jeg) en god idé, at begrænse inputtet
>> mest muligt. F.eks. kan der være en bug i en PHP kommando der gør, at den
>> udføre buffer overflow eller lignende.
>
> Hvis du tager et muligt buffer overflow med i dine overvejelser, så skal
> du nok ikke køre inputtet gennem to funktioner før du klipper strengen

Point taken, tak.



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste