Veilig om eval() te gebruiken in deze situatie?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Furio Scripting

Furio Scripting

19/09/2013 09:53:59
Quote Anchor link
Beste forumleden,


De enige die content kan invoeren zijn de administrators (klanten) welke ingelogd dienen te zijn in de backend. Deze content wordt ingevoerd via een WYSIWYG editor (CKeditor) waar ik het gebruik van php tags in de source code toegankelijk heb gemaakt.

Nu denk ik dat 90% van mijn klanten geen verstand heeft van PHP dus ze zullen dit vrijwel nooit gebruiken, het is meer voor mijzelf als ik een keer een extra module moet maken voor een klant dat ik toegang hebt tot PHP.

Nu is het zo dat ik een contact pagina heb gemaakt in deze editor en dus ook PHP heb gebruikt voor het onthouden van de values, de reden dat ik het via deze content editor doe is dat mijn klanten nog steeds de teksten kunnen wijzigen etc.

Ik gebruik nu de eval functie om de ingevoerde content uit te lezen in de frontend en dit werkt perfect maar ik lees ontzettend veel verhalen van programmeurs dat eval evil is en dat je het beter niet kan gebruiken, maar het lijkt mij als een normale user er niet bij kan, kan er toch weinig fout gaan?
 
PHP hulp

PHP hulp

19/04/2024 10:31:23
 
Erwin H

Erwin H

19/09/2013 10:00:19
Quote Anchor link
Evil inderdaad. Alle php code wordt namelijk uitgevoerd, zonder dat je er nog iets tegen kan doen. Zelfs al denk je nu dat het niet fout kan gaan, zal het een keer fout gaan. Helemaal omdat je zelf al zegt dat de meeste mensen die er gebruik van kunnen maken er geen verstand van hebben.

Als het alleen maar gaat om content toe te voegen dan is een veel betere optie om te werken met placeholders en die op het moment van een request te vervangen met de content die nodig is. Veel veiliger en net zo simpel.

Furio Scripting op 19/09/2013 09:53:59:
Nu denk ik dat 90% van mijn klanten geen verstand heeft van PHP dus ze zullen dit vrijwel nooit gebruiken
dus als ze het gebruiken zal het geheid fout gaan.
Gewijzigd op 19/09/2013 10:00:39 door Erwin H
 
Kris Peeters

Kris Peeters

19/09/2013 10:11:30
Quote Anchor link
Niet dat dat de hoogste autoriteit is ... maar er bestaan zelfs T-shirts met Eval is Evil
http://rlv.zcache.com/eval_is_evil_script_happens_t_shirt-rb832d959a4e9441ba1cbbd8bf4eb497d_804gy_512.jpg

En op zich kan eval wel zinnig zijn, maar wat je hier beschrijft ... loopt fout.
 
Furio Scripting

Furio Scripting

19/09/2013 10:26:16
Quote Anchor link
Oke, op basis van jullie input heb ik besloten af te stappen van eval() en te gaan voor de placeholders maar dit lijkt nog niet te werken helaas:

Ik heb in de database de volgende placeholders geplaatst: {name} en {email}

Nu doe ik het volgende hiermee:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php $content = $rows['content'];
                       
                       $vars = array
                       (
                        "{name}" => '<?php echo $_POST["contactName"]; ?>',
                        "{email}" => '<?php echo $_POST["emailAddress"]; ?>'
                    );

                    $message = strtr($content, $vars);
                       
                       echo $message; ?>


Maar nu komt er net zoals voorheen weer gewoon de code te staan en wordt deze niet door PHP heen gehaald, doe ik iets verkeerd?
 
Erwin H

Erwin H

19/09/2013 10:31:08
Quote Anchor link
Waarvoor zou je dan in de replace string nog php tags gaan zetten? Gewoon direct de string erin plakken die je wil zien natuurlijk!
 
Furio Scripting

Furio Scripting

19/09/2013 10:36:52
Quote Anchor link
Erwin H op 19/09/2013 10:31:08:
Waarvoor zou je dan in de replace string nog php tags gaan zetten? Gewoon direct de string erin plakken die je wil zien natuurlijk!


Dat kan toch niet in deze situatie?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<h2>Hier kunt u contact met ons opnemen:</h2>


<hr />
<form action="" method="POST">
<div id="contact-container">
<div id="contact-left">Name:</div>

<div id="contact-right"><input name="contactName" type="text" value="{name}" /></div>
</div>

<div style="clear:both;">&nbsp;</div>

<div id="contact-left">Email-address:</div>

<div id="contact-right"><input name="emailAddress" type="text" value="{email}" /></div>

<div style="clear:both;">&nbsp;</div>

<div id="contact-left">Extra information:</div>

<div id="contact-right"><textarea name="moreInfo"></textarea></div>

<div style="clear:both;">&nbsp;</div>

<div id="contact-submit-container"><input name="contact-page" type="submit" value="Send" /></div>
</form>


Ik wil dus de value die gepost wordt onthouden in geval van errors zoals verkeerd email-adres.
 
Erwin H

Erwin H

19/09/2013 11:00:38
Quote Anchor link
Even terug naar af (geen 200 gulden).

Je hebt een form in je database en je wil in dat form bepaalde waarde hebben die ergens anders vandaan komen. Die waardes staan in een php variabele (de $_POST array), maar zijn gewoon strings.
In het form in je database heb je placeholders zitten en die ga je vervangen door de waardes in die variabelen. Dus gewoon:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$content
= $rows['content'];
                      
$vars = array(
   "{name}" => $_POST["contactName"],
   "{email}" => $_POST["emailAddress"]
 );


$message = strtr($content, $vars);
                      
echo $message;
?>
 
Furio Scripting

Furio Scripting

19/09/2013 11:12:07
Quote Anchor link
Erwin u wordt bedankt voor de heldere uitleg. Alles werkt zoals het moet en dat zonder die enge eval().
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.