Veilig om eval() te gebruiken in deze situatie?
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?
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:
dus als ze het gebruiken zal het geheid fout gaan.Nu denk ik dat 90% van mijn klanten geen verstand heeft van PHP dus ze zullen dit vrijwel nooit gebruiken
Gewijzigd op 19/09/2013 10:00:39 door Erwin H
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.
Ik heb in de database de volgende placeholders geplaatst: {name} en {email}
Nu doe ik het volgende hiermee:
Code (php)
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?
Waarvoor zou je dan in de replace string nog php tags gaan zetten? Gewoon direct de string erin plakken die je wil zien natuurlijk!
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)
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
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;"> </div>
<div id="contact-left">Email-address:</div>
<div id="contact-right"><input name="emailAddress" type="text" value="{email}" /></div>
<div style="clear:both;"> </div>
<div id="contact-left">Extra information:</div>
<div id="contact-right"><textarea name="moreInfo"></textarea></div>
<div style="clear:both;"> </div>
<div id="contact-submit-container"><input name="contact-page" type="submit" value="Send" /></div>
</form>
<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;"> </div>
<div id="contact-left">Email-address:</div>
<div id="contact-right"><input name="emailAddress" type="text" value="{email}" /></div>
<div style="clear:both;"> </div>
<div id="contact-left">Extra information:</div>
<div id="contact-right"><textarea name="moreInfo"></textarea></div>
<div style="clear:both;"> </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.
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:
Erwin u wordt bedankt voor de heldere uitleg. Alles werkt zoals het moet en dat zonder die enge eval().