[PHP] Pagina includen zonder ext

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik gebruik deze code om pagina's te includen:

<?php

$pagina = $_GET["id"];

if($id == "") {
include("inleiding.html");
}

else {
if(file_exists("$id")) {
include("$id");
}

else {
include("fout.html");
}

}

?>

Ik moet om de pagina aan te roepen /?id=pagina.html invullen.
Hoe kan ik er voor zorgen dat ik alleen "pagina" hoef in te vullen en geen .html er achter?

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Dit is heel onveilig. Lees daarover in de faq. Wat je kan doen is ipv include("$id") include("$id" . ".html") doen. Maar dit is echt heel onveilig.

Acties:
  • 0 Henk 'm!

  • Priet
  • Registratie: Januari 2001
  • Laatst online: 08:01

Priet

To boldly do what no one has..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$pagina = $_GET["id"];

if($id == "") {
include("inleiding.html");
}

else {
if(file_exists("$id" . ".html")) {
include("$id".".html");
}

else {
include("fout.html");
}

}

Even een ".html" erachter plakken :Y)

"If you see a light at the end of a wormhole, it's probably a photon torpedo!"


Acties:
  • 0 Henk 'm!

  • Kaasplank
  • Registratie: Februari 2001
  • Niet online
wel ff een array maken met toegestane te includen paginas en checken of de ingevulde pagina in de array staat

Acties:
  • 0 Henk 'm!

Verwijderd

Ik wil even benadrukken dat simpelweg een extrensie erachter plakken *niet* veilig is!

Aangezien het \0 character de string terminator is, kan je dus alnog een eigen extensie erachter plakken met het \0 character erachter...

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Verwijderd schreef op zaterdag 20 november 2004 @ 18:43:
Ik wil even benadrukken dat simpelweg een extrensie erachter plakken *niet* veilig is!

Aangezien het \0 character de string terminator is, kan je dus alnog een eigen extensie erachter plakken met het \0 character erachter...
Ehm, wat TS doet is überhaupt niet veilig. Zomaar dingen includen. Een paar tutorials lezen zou geen kwaad kunnen.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

*kuch*

ik zie alleen maar dat je $_GET['id'] omzet naar $pagina; maar dat je weer $id gebruikt als 'parameter' beetje dubbel op... of het een of het ander... en zo ie zo zou ik niet gaan includen op alleen $_GET['id'] maar zet bv alle pagina's in een 'array' en check of ze in deze array zitten; zo ja doe dan pas een include

dus iets van (uit het hoofd dus).

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
$mogelijk = array("pagina.html", "test.html","woei.html");

if (isSet($_GET['id']) && in_array($_GET['id'], $mogelijk))
{
    // ja pagina gevonden.
    $pagina = $_GET['id'];
}
elseif (!isSet($_GET['id']))
{
    $pagina = "inleiding.html";
}
else
{
    $pagina = "fout.html";
}

include($pagina);

?>

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Eigenlijk offtopic, maar dubbele aanhalingstekens zijn niet nodig bij dit.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$mogelijk = array('pagina', 'test', 'woei');
if (($_GET['id']) && in_array($_GET['id'], $mogelijk)) {
    // mag geinclude worden
    $pagina = $_GET['id'];
} elseif (!$_GET['id']) {
    // er is geen ?id= gebruikt
    $pagina = "inleiding";
} else {
    $pagina = "fout";
}
include $pagina.'.html';
?>


edit:
puntje ;)

[ Voor 20% gewijzigd door krvabo op 21-11-2004 01:47 ]

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

Verwijderd

[verbetermodus]^^^ puntje vergeten op regel 12 voor de h van html [/verbetermodus]

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
En om het helemaal netjes te doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$mogelijk = array('pagina', 'test', 'woei');
if (isset($_GET['id']) && in_array($_GET['id'], $mogelijk)) {
    // mag geinclude worden
    $pagina = $_GET['id'];
} else if (!isset($_GET['id'])) {
    // er is geen ?id= gebruikt
    $pagina = "inleiding";
} else {
    $pagina = "fout";
}
include $pagina . '.html';


isset() toegevoegd en '.html' ipv 'html'.

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

chris schreef op zondag 21 november 2004 @ 01:31:
En om het helemaal netjes te doen:
PHP:
1
2
3
4
if (isset($_GET['id']) && in_array($_GET['id'], $mogelijk)) {
} else if (!isset($_GET['id'])) {
} else { }
include $pagina . '.html';


isset() toegevoegd en '.html' ipv 'html'.
Het is netter, dat geef ik toe, maar isset is niet nodig. Ik weet ook niet of dit nog wordt veranderd in latere versies van php, dus het is wel 'veiliger' om het zo te doen.
En elseif mag aan elkaar hoor ;)

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
krvabo schreef op zondag 21 november 2004 @ 01:50:
[...]

Het is netter, dat geef ik toe, maar isset is niet nodig. Ik weet ook niet of dit nog wordt veranderd in latere versies van php, dus het is wel 'veiliger' om het zo te doen.
En elseif mag aan elkaar hoor ;)
Het geeft geen error, maar wel een warning. ;)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Bovendien is het gewoon niet netjes. $_GET['id'] bevat een string, ook al is PHP dan niet strong-typed. Je gaat dus die string vergelijken met true (of 1), en dat zou in elke fatsoenlijke taal een fout opleveren. Dat het kan wil dus niet zeggen dat je het moet doen. Leer eenmaal ranzige dingen aan en je komt er nooit meer vanaf.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Of je leert het in eerste instantie niet goed (jeuj voor die ranzige scripts op sites als phpfreakz), en dan kom je er op een gegeven moment achter, en ben je flink wat uurtjes kwijt met rewrites.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

ik zie dat me code is overgenomen, 't idee is/was dus goed B-)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke bedankt allemaal hier mee gaat het lukken :)
Pagina: 1