[php] als eval vies is, hoe dan wel?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BobDay
  • Registratie: December 2001
  • Laatst online: 11-08 21:02
Ik wil een soort van berichtensysteem maken, dat de binnen komende berichten in een queue zet van een CMS systeem.

Dit wil is een beetje flexibel opzetten, zodat voor elk formulier dat ik maar een eigen template hoort. Deze templates wil ik opslaan in de db. Hier een voorbeeldje van een template zoals die in de db zou kunnen staan:

[code]
"Op $datum is het volgende door $_POST[\"naam\"] verstuurd:<br><hr>
email: $_POST[\"email\"]<br>$_POST[\"bericht\"]";
[code]

Hiervoor hoef ik dus alleen maar een formulier te maken met de volgende velden:
naam,email,bericht,templateID (hidden)

zo zou ik dus het complete bericht kunnen samenstellen en opslaan in de db:
PHP:
1
eval ("\$bericht = \"$db->template\";");


Maar wat is nu het gevaar, dat de user in bijv $_POST["bericht"] php code gaat zetten? of wordt die code niet uitgevoerd?

En hoe zou het anders kunnen, als je toch begrijpelijke variabelen wil blijven gebruiken?

43% of all statistics are worthless


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
<?
$bericht = addslashes(htmlspecialchars($_POST['bericht']));
?>

normaal zou je nu geen gevaar moeten hebben, de PHP en HTML worden gestript ;)

Natuurlijk opslaan in de db hé ;) onder $bericht dan.

[ Voor 31% gewijzigd door Verwijderd op 06-06-2003 20:35 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

kan je niet beter zelf een soort template taaltje maken?
bijvoorbeeld dat je {POST:bericht} laat replacen door $_POST['bericht'] ofzo?

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
1 tip: voor templates gebruik ik altijd mijn zelfgeschreven Stackbased-template parser. Die parsed templates in losse files die er ongeveer zo uitzien:

code:
1
2
3
[foreach array="array" as="var"]
%var%
[/foreach]


Omdat ie stackbased is, kun je foreaches nesten (net als alle anderen zoals if, else enzo). Het is gratis te gebruiken en te downloaden op www.codebase.nl :)

Acties:
  • 0 Henk 'm!

  • nrg
  • Registratie: April 2001
  • Laatst online: 14:04

nrg

MisterData schreef op 06 June 2003 @ 20:41:
1 tip: voor templates gebruik ik altijd mijn zelfgeschreven Stackbased-template parser. Die parsed templates in losse files die er ongeveer zo uitzien:

code:
1
2
3
[foreach array="array" as="var"]
%var%
[/foreach]


Omdat ie stackbased is, kun je foreaches nesten (net als alle anderen zoals if, else enzo). Het is gratis te gebruiken en te downloaden op www.codebase.nl :)
Snelle link: http://www.codebase.nl/index.php/command/viewcode/id/184

Ziet er goed uit!

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Misschien handig om erbij te vermelden dat een aantal voorbeeld templates (alsmede een site die de engine gebruikt) op www.qprcostcontrol.nl/themes/ te vinden zijn (de site zelf is dus qprcostcontrol.nl) ;)

Acties:
  • 0 Henk 'm!

  • BobDay
  • Registratie: December 2001
  • Laatst online: 11-08 21:02
MisterData schreef op 06 June 2003 @ 20:41:
1 tip: voor templates gebruik ik altijd mijn zelfgeschreven Stackbased-template parser. Die parsed templates in losse files die er ongeveer zo uitzien:

code:
1
2
3
[foreach array="array" as="var"]
%var%
[/foreach]


Omdat ie stackbased is, kun je foreaches nesten (net als alle anderen zoals if, else enzo). Het is gratis te gebruiken en te downloaden op www.codebase.nl :)
Lijkt mij een beetje te uitgebreid voor wat ik in mijn hoofd heb. Ik zou het denk ik dan ook wel met mijn huidige template-engine kunnen doen.
Verwijderd schreef op 06 June 2003 @ 20:34:
PHP:
1
2
3
<?
$bericht = addslashes(htmlspecialchars($_POST['bericht']));
?>

normaal zou je nu geen gevaar moeten hebben, de PHP en HTML worden gestript ;)

Natuurlijk opslaan in de db hé ;) onder $bericht dan.
Als dit veilig is dan heb ik hier denk ik genoeg aan

43% of all statistics are worthless


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
BobDay schreef op 06 juni 2003 @ 20:59:
[...]


Lijkt mij een beetje te uitgebreid voor wat ik in mijn hoofd heb. Ik zou het denk ik dan ook wel met mijn huidige template-engine kunnen doen.


[...]


Als dit veilig is dan heb ik hier denk ik genoeg aan
Waarom te uitgebreid? Dit spul is erg makkelijk in gebruik, waarom dan niet een stapje groter? Ik heb een CMS gebaseerd op deze engine, ik kan zo zonder de PHP-code aan te raken een compleet nieuwe site bouwen! Dat is het voordeel van een template-engine als deze.

[/reclame-spam-modus]

Acties:
  • 0 Henk 'm!

  • BobDay
  • Registratie: December 2001
  • Laatst online: 11-08 21:02
MisterData, ik heb er serieus naar gekeken maar zonder documentatie is het erg lastig om jouw code te gebruiken/toepassen . De voorbeelden op http://www.qprcostcontrol.nl/themes/ brengen mij ook nog niet echt opweg. Op codebase zijn er trouwens meer mensen die er zo over denken.

43% of all statistics are worthless


Acties:
  • 0 Henk 'm!

  • Mafioso
  • Registratie: November 2000
  • Laatst online: 17-09 20:33
Misschien klein beetje offtopic, maar toch .. Ik zelf gebruik nu sinds kort Smarty, een fijne template enige waarbij je gebruik kan maken van serverside caching. Tevens erg goed gedocumenteerd.
http://smarty.php.net/

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Smarty is ook een optie ja, ik dacht dat Smarty zelf PHP-code kon genereren waardoor het retesnel is.... Smarty leek mij alleen een beetje te groot op de een of andere manier..

BobDay: Klein voorbeeldje dan maar:

je script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
require("tpl.php");

$tpl = loadTemplate("mytemplate.tpl");
addtemplateVar($tpl,"var1","blaat");
if(validateTree($tpl,false)) {
    echo "De template is valid.";
}
else {
    echo "De template is niet valid. ";
}

echo parseTemplate($tpl);
?>


mytemplate.tpl:
code:
1
<b>%var1%</b>


De uitvoer zou "blaat" moeten zijn :) Als je met addTemplateVar een array toevoegt, dan kun je daar doorheen-foreachen. Stel dat var1 nu niet "blaat" maar array(1,2,3,4,5) is:

code:
1
2
3
4
In de array var1 zitten de waarden:<br/>
[foreach array="var1" as="v"]
%v% 
[/foreach]


Binnenkort maakt deze engine trouwens een sprongetje naar SourceForge, vanaf dat moment zal ik er ook commentaar bijstoppen en een tutorial. Heb er alleen nu niet zoveel tijd voor helaas... Als je toch mijn engine wil gebruiken dan kun je me natuurlijk altijd mailen voor hulp (tommy(apenstaart)vandervorst-bs.nl)

[ Voor 24% gewijzigd door MisterData op 06-06-2003 22:53 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

MisterData schreef op 06 June 2003 @ 22:52:
Smarty is ook een optie ja, ik dacht dat Smarty zelf PHP-code kon genereren waardoor het retesnel is.... Smarty leek mij alleen een beetje te groot op de een of andere manier..

BobDay: Klein voorbeeldje dan maar:

je script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
require("tpl.php");

$tpl = loadTemplate("mytemplate.tpl");
addtemplateVar($tpl,"var1","blaat");
if(validateTree($tpl,false)) {
    echo "De template is valid.";
}
else {
    echo "De template is niet valid. ";
}

echo parseTemplate($tpl);
?>


mytemplate.tpl:
code:
1
<b>%var1%</b>


De uitvoer zou "blaat" moeten zijn :) Als je met addTemplateVar een array toevoegt, dan kun je daar doorheen-foreachen. Stel dat var1 nu niet "blaat" maar array(1,2,3,4,5) is:

code:
1
2
3
4
In de array var1 zitten de waarden:<br/>
[foreach array="var1" as="v"]
%v% 
[/foreach]


Binnenkort maakt deze engine trouwens een sprongetje naar SourceForge, vanaf dat moment zal ik er ook commentaar bijstoppen en een tutorial. Heb er alleen nu niet zoveel tijd voor helaas... Als je toch mijn engine wil gebruiken dan kun je me natuurlijk altijd mailen voor hulp (tommy(apenstaart)vandervorst-bs.nl)
offtopic:
er zitten wel veel foutjes in :X
zet error_reporting maar eens op E_ALL :X

Heb je misschien een overzichtje van alle mogelijkheden?
Want dat kan ik er zo niet uithalen.
Pagina: 1