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