Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
OT-Teil von: mysql table soll include einbinden [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
OT-Teil von: mysql table soll include einbinden


 
piratos
06-10-2009, 11:37 
 
Diese Diskussion hat sich aus http://www.php-resource.de/forum/php-developer-forum/97727-mysql-table-soll-include-einbinden.html entwickelt, wurde aber sehr off-topic. Deshalb abgetrennt und hierher verschoben. Weiterhin viel Spaß mit der Diskussion ;-)
wahsaga

Selbstverständlich kann man PHP in eine Mysql DB ablegen, für Mysql sind es aber auch nur Daten nichts weiter.

1. Auslesen
2. include($meintreffer['name']);

<?php

$simuliertertreffer['name']='test.php';

include($simuliertertreffer['name']);

?>

Sind es interne Scripte dann muss man das mit eval abarbeiten.

z.B.

eval("?".'>'.$simuliertertreffer['name']);

 
h3ll
06-10-2009, 11:53 
 
Sind es interne Scripte dann muss man das mit eval abarbeiten.

z.B.

eval("?".'>'.$simuliertertreffer['name']);

*pfusch* *pfusch* *pfusch*


So ein Blödsinn sollte man Anfängern erst gar nicht zeigen. Damit führt man sie nur auf den falschen Weg.

 
combie
06-10-2009, 11:59 
 
Sind es interne Scripte dann muss man das mit eval abarbeiten.Nein, muss man nicht.

 
piratos
06-10-2009, 12:06 
 
Nein, muss man nicht.

Verat doch mal deine Auflösung könntest bei den Developern z.B. von Smarty ordentlich etwas beitragen.

 
combie
06-10-2009, 12:10 
 
Mein Posting #5 überlesen?
Ein fopen-url-wrapper. Dann klappts auch mit include.
(je nach Konfiguration)

Arg subjektiv: Smarty ist eine Seuche.

 
h3ll
06-10-2009, 12:15 
 
Verat doch mal deine Auflösung könntest bei den Developern z.B. von Smarty ordentlich etwas beitragen.

Hör auf mit Smarty, das ist doch der größte Mist. Ich würde mich schämen ein Entwickler davon zu sein.

 
piratos
06-10-2009, 12:17 
 
*pfusch* *pfusch* *pfusch*


So ein Blödsinn sollte man Anfängern erst gar nicht zeigen. Damit führt man sie nur auf den falschen Weg.

Ich habe den Eindruck du hast wenig Ahnung von angesagten Systemen die eval verwenden ohne Ende ja sogar müssen. Ist ja schon richtig peinlich diese pfusch Äusserung.

Ein fopen-url-wrapper. Dann klappts auch mit include.

Hier geht es um die eval - Option wenn der ganze Code in Mysql abgelegt ist und somit in einer VAR und nicht als externes Script vorliegt.
Da gibt es wohl keine anderen Möglichkeiten als eval zu verwenden.

 
h3ll
06-10-2009, 12:23 
 
Ich habe den Eindruck du hast wenig Ahnung von angesagten Systemen die eval verwenden ohne Ende ja sogar müssen. Ist ja schon richtig peinlich diese pfusch Äusserung.

Welche "angesagten" Systeme sind das? Nur weil etwas verwendet wird, muss es noch lange nicht gut sein. Ich hab schon so viel Schrott gesehen. zB. der Code von Wordpress ist eine reine Katastrophe.

Hier geht es um die eval - Option wenn der ganze Code in Mysql abgelegt ist und somit in einer VAR und nicht als externes Script vorliegt.
Da gibt es wohl keine anderen Möglichkeiten als eval zu verwenden.

Doch. Siehe combie.

 
onemorenerd
06-10-2009, 12:24 
 
@piratos: Nenne doch bitte mal einen reellen Use Case, wenn möglich aus einer Web-Applikation, der sich nur mit eval() umsetzen läßt.

 
piratos
06-10-2009, 12:27 
 
Bleiben wir doch einfach mal bei einer Templateengine wie Smarty, schau dir die Konzeption an und du weisst Bescheid.

Wenn du das anders lösen kannst hast du die Lösung in der Hand.

 
h3ll
06-10-2009, 12:30 
 
Bleiben wir doch einfach mal bei einer Templateengine wie Smarty, schau dir die Konzeption an und du weisst Bescheid.

Wenn du das anders lösen kannst hast du die Lösung in der Hand.

Smarty ist als ganzes ein großer Bug. Ich seh da keinen Sinn darüber zu diskutieren. Ich hab leider schon viel zu viel davon gesehen, das reicht fürs ganze Programmiererleben.

 
onemorenerd
06-10-2009, 12:33 
 
Bleiben wir doch einfach mal bei einer Templateengine wie Smarty, schau dir die Konzeption an und du weisst Bescheid.

Wenn du das anders lösen kannst hast du die Lösung in der Hand.
Ich kann dir zig Templateengines zeigen, die ohne eval() auskommen. Damit wäre bewiesen, dass der Use Case "Templateenigne" ohne eval() umsetzbar ist. Hast du noch einen?

 
hhcm
06-10-2009, 12:35 
 
Also Modx arbeitet mit eval. Über das Backend kann man Plugins oder Snippets in der DB speichern, diese werden dann über eval ausgeführt.

Zerreisst euch das Maul drüber, aber ich find Modx als CMS gar nicht so übel.

 
h3ll
06-10-2009, 12:40 
 
Also Modx arbeitet mit eval. Über das Backend kann man Plugins oder Snippets in der DB speichern, diese werden dann über eval ausgeführt.

Zerreisst euch das Maul drüber, aber ich find Modx als CMS gar nicht so übel.

Dazu wäre aber kein eval() nötig.

Es macht nur die Fehlersuche aufwändiger und frisst unnötig Performance.

 
onemorenerd
06-10-2009, 12:50 
 
Über das Backend kann man Plugins oder Snippets in der DB speichern, diese werden dann über eval ausgeführt.
Dieser Use Case, ich nenne ihn mal "PHP-Code im CMS editierbar", läßt sich ebenso mit folgendem Code umsetzen.
$tf = tempnam(sys_get_temp_dir(), 'evl');
file_put_contents($tf, $yourCodeToEval);
include $tf;
Man kann den Code aber auch gleich in Dateien speichern, statt in der DB. Dann profitiert man von aussagekräftigen Fehlermeldungen und Opcode Caches.

 
piratos
06-10-2009, 12:58 
 
Dazu wäre aber kein eval() nötig.

frisst unnötig Performance.

Na das sind ja alles Experten - ich muss mich nur wundern.
Man muss die Umstände sehen warum man eval einsetzt und da ist diese Methode ausserodentlich performant.

Ich würde sagen, schreibt selbst mal ein Templatesystem damit kann man richtig etwas daraus machen.

Einzig für mich interessante ist das dem Fragesteller soweit geholfen ist, das er weiter machen kann, alles andere gehört hier nicht rein.

 
hhcm
06-10-2009, 12:59 
 
Ich habe ja auch nicht behauptet das es ohne nicht gehen würde. Warum die Entwickler auf eval setzen bleibt wohl ein rätsel. Trotzallem sind keine schweren Exploits bekannt wie z.B in Typo3, Drupal, Joomla und wie sie alle heissen.

Aussagekräftige Fehlermeldungen bekommt man im Backend angezeigt. Erst die typische Fehler in eval()´d Code Meldung und gleichzeitig die ausführliche PHP Fehlermeldung.

 
combie
06-10-2009, 13:00 
 
@piratos
Keiner hat was dagegen, wenn du bei dir im stillen Kämmerlein fleißig mit smarty und eval() puzzlest. Aber es Anfängern als die ultimative Lösung verkaufen, das muss auf heftigen Widerstand stoßen.

 
piratos
06-10-2009, 13:04 
 
Aber es Anfängern als die ultimative Lösung verkaufen, das muss auf heftigen Widerstand stoßen.

Unsinn - eval ist eine ganz normale Sache wie andere erheblich kompliziertere Funktionen die im PHP Manual stehen, das hat mit Anfänger oder Fortgeschrittene rein nichts zu tun.

Und es ist eine Lösung wenn man über Mysql arbeiten will, das war die Fragestellung.

Wie sieht denn eure Lösung für Mysqlbetrieb aus, ohne immer auf externe Files zu gehen.

 
h3ll
06-10-2009, 13:04 
 
Na das sind ja alles Experten - ich muss mich nur wundern.
Man muss die Umstände sehen warum man eval einsetzt und da ist diese Methode ausserodentlich performant.

Du hast bis jetzt immer noch keine genannt, wo das erforderlich wäre.

Ich würde sagen, schreibt selbst mal ein Templatesystem damit kann man richtig etwas daraus machen.

Hab ich schon. Ganz ohne eval().

Einzig für mich interessante ist das dem Fragesteller soweit geholfen ist, das er weiter machen kann, alles andere gehört hier nicht rein.

In dem Forum gehts darum vernünftig Programmieren zu lernen und nicht um "wie fix ich ein Problem mit möglichst wenig Aufwand".

 
piratos
06-10-2009, 13:05 
 
Hab ich schon. Ganz ohne eval().


Die würde mich interessieren, kann man die irgendwo downloaden ?

 
h3ll
06-10-2009, 13:06 
 
Wie sieht denn eure Lösung für Mysqlbetrieb aus, ohne
immer auf externe Files zu gehen.

Hat dir combie bereits mehrfach genannt! Du bist wohl ziemlich auf eval() fixiert und siehst somit andere Lösungswege gar nicht mehr, oder willst sie nicht sehen.

 
h3ll
06-10-2009, 13:07 
 
Die würde mich interessieren, kann man die irgendwo downloaden ?

Nein, und ich kann es auch nicht zur Verfügung stellen, weil es nicht mein Eigentum ist.

 
piratos
06-10-2009, 13:09 
 
Hat dir combie bereits mehrfache genannt! Du bist wohl ziemlich auf eval() fixiert und siehst somit andere Lösungswege gar nicht mehr, oder willst sie nicht sehen.

Wo steht denn da eine für Mysql Betrieb - alles extern.

Ich bin nicht auf eval fixiert, aber schliesse Lösungen nie aus.

In dem Forum gehts darum vernünftig Programmieren zu lernen und nicht um "wie fix ich ein Problem mit möglichst wenig Aufwand".

Da darf ich mal das Motto dieses Forums zitieren:

PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here!


Von einem Lehrforum ist da nicht die Rede.

 
combie
06-10-2009, 13:10 
 
das hat mit Anfänger oder Fortgeschrittene rein nichts zu tun.
Doch, sicher!
Ein Fortgeschrittener weiß was er tut und kennt die Gefahren und Probleme. Einen Anfänger lockst du damit in eine u.U. tötliche Falle.

 
piratos
06-10-2009, 13:11 
 
Nein, und ich kann es auch nicht zur Verfügung stellen, weil es nicht mein Eigentum ist.

Und welches Produkt arbeitet damit ?

 
piratos
06-10-2009, 13:13 
 
Einen Anfänger lockst du damit in eine u.U. tötliche Falle.

Also eval und tödliche Falle ?? Ich glaube es nicht.:huep:
Include eines externen Scriptes dessen Namen in Mysql abgelegt ist eine tödliche Falle ? :rocks:

Also ne was willst du hier verkaufen ?

 
h3ll
06-10-2009, 13:16 
 
Wo steht denn da eine für Mysql Betrieb - alles extern.

Wer sagt, dass ein URL Wrapper nur mit externen Daten funktioniert?

 
onemorenerd
06-10-2009, 13:21 
 
Ja piratos, wir wissen, dass du da ein ganz tolles Produkt hast, komplett selbst entwickelt und super super schnell. *egostreichel*

Bleiben wir mal bei den Fakten:
Es gibt Alternativen zu eval().
eval() hat Vor- und Nachteile; jede Alternative ebenfalls.
Bei eval() überwiegen die Nachteile, bei manchen Alternativen die Vorteile.

Und meine Motivation, hier im Forum gegen eval() zu argumentieren ist die, dass mit eval() oft Konzept- und Designsünden einhergehen.
In diesem konkreten Fall will der TO die Reihenfolge einiger "Blöcke" in der Seite bestimmen. Jeder Block wird durch ein PHP-Include erzeugt. Dazu braucht es einfach kein eval. Punkt.

 
h3ll
06-10-2009, 13:23 
 
Und welches Produkt arbeitet damit ?

Ein Präsentations-Managment-Tool für den Online- und Onsite-Einsatz.

 
piratos
06-10-2009, 13:24 
 
Wer sagt, dass ein URL Wrapper nur mit externen Daten funktioniert?

Na wenn man den Code http://www.technischedaten.de/pmwiki2/uploads/Php/MysqlWrapper.php laden muss um mal zu zeigen wie es auch anders herum geht das ist doch voll daneben für solch einen Kleinkram.

 
h3ll
06-10-2009, 13:30 
 
Ich finde es generell daneben, Programmcode in der Datenbank zu speichern. Aber sowas ist zumindest immer noch besser, als hardcore mit eval() drauf loszugehen.

 
piratos
06-10-2009, 13:36 
 
Ich finde man sollte sich hier mehr um die vom TO gestellte Frage und Ausgangsbasis kümmern und schon garnicht zahlreiche Ansätze liefern wie man das selbst anders machen würde.

Die Frage war einfach und ist einfach zu beantworten gewesen.

Kommentare wie
Das ist sicherlich keine Nummer für einen Anfänger.

Lies mal ein paar Einsteigertutorials und das Manual oder hole dir einen Profi.

oder
Bevor man irgendwas programmiert, sollte man erstmal die Grundlagen lernen. Alles andere ist ziemlich sinnlos.

der an anderer Stelle aber meint es wäre hier so etwas wie ein Lehrforum - die sind voll daneben, das sollte man sich schenken.

So für mich ist der Fall hier erledigt - hätte vielleicht noch gerne die Referenzen der zahllosen Templateengines die nicht mit eval arbeiten.

 
h3ll
06-10-2009, 13:55 
 
So für mich ist der Fall hier erledigt - hätte vielleicht noch gerne die Referenzen der zahllosen Templateengines die nicht mit eval arbeiten.

Um mal eine zu nennen: Zend View (http://framework.zend.com/manual/en/zend.view.html)

 
combie
06-10-2009, 14:15 
 
Templateengines: Warum diese nicht glücklich machen (http://www.bastian-frank.de/site/front_content.php?idart=47)

 
piratos
06-10-2009, 14:22 
 
Um mal eine zu nennen: Zend View (http://framework.zend.com/manual/en/zend.view.html)

Da kann ich nur schmunzeln eval in allen Schattierungen PHP und Javascript.

Und das ist ja nur eine Adresse von den unzähligen Templateengines ?

 
piratos
06-10-2009, 14:25 
 
Templateengines: Warum diese nicht glücklich machen (http://www.bastian-frank.de/site/front_content.php?idart=47)

Das passt zwar alles nicht zum Topic , aber bitte.
Wer diese Meinung hat ok, es gibt da unzählige andere Meinungen die ganz dafür sind.

Kann jeder machen wie er will ist doch kein Problem für niemanden - oder ?

 
h3ll
06-10-2009, 14:27 
 
Da kann ich nur schmunzeln eval in allen Schattierungen PHP und Javascript.

Im Code kommt nirgendwo ein eval() vor.

 
piratos
06-10-2009, 14:33 
 
Im Code kommt nirgendwo ein eval() vor.
Soso

hier mal eines der ersten

eval($snippet);
} catch(Zend_Gdata_App_Exception $e) {
echo 'Error: ' . $e->getMessage();die JS evals schenke ich mir mal.

 
h3ll
06-10-2009, 14:34 
 
In welcher Datei und in welcher Zeile soll das angeblich vorkommen? Ich habe gerade alle Dateien des kompletten Zend Frameworks durchsucht und deine genannte Variable $snippet kommt nirgendwo vor.

 
piratos
06-10-2009, 14:40 
 
In welcher Datei und in welcher Zeile soll das angeblich vorkommen? Ich habe gerade alle Dateien des kompletten Zend Frameworks durchsucht und deine genannte Variable $snippet kommt nirgendwo vor.
Das habe ich auch gemacht und frisch geholt.
Ich muss dir wohl nicht erklären wie man sucht.

 
h3ll
06-10-2009, 14:45 
 
Das habe ich auch gemacht und frisch geholt.
Ich muss dir wohl nicht erklären wie man sucht.

Nachdem du nicht bereit bist Angaben darüber zu machen, in welcher Code-Stelle das vorkommt, schenke ich dem mal keinen Glauben.

_Irgendwas_ behaupten kann jeder. Belegen sollte man es aber auch können.

 
piratos
06-10-2009, 14:48 
 
Nachdem du nicht bereit bist Angaben darüber zu machen, in welcher Code-Stelle das vorkommt, schenke ich dem mal keinen Glauben.

_Irgendwas_ behaupten kann jeder. Belegen sollte man es aber auch können.

Natürlich - aber wer als Fachmann in einer frischen Zendversion nichts findet ist selber schuld. Texthinweis hast du auch und JS eval findest du zu hunderten. Sollich dir mal die Downloadadresse nennen ?

 
h3ll
06-10-2009, 14:49 
 
Natürlich - aber wer als Fachmann in einer frischen Zendversion nichts findet ist selber schuld. Texthinweis hast du auch und JS eval findest du zu hunderten. Sollich dir mal die Downloadadresse nennen ?

Stell mich nicht als Depp hin. Ich hab die aktuelle Release-Version (1.9.3) und ich weiß auch wie man in Dateien sucht. Der von dir genannte Code kommt einfach nicht vor. Das ist Fakt, punkt, aus.

 
piratos
06-10-2009, 15:00 
 
Du findest kein einziges PHP eval oder js eval - kaum zu glauben.

Vielleicht sucht du mal alles durch auch die Demos.

JS evals gibt es überall - tonnenweise.

-------------

Auf der anderen Seite geht Zend z.B. sehr ausführlich auf Smarty ein, wohlwissend das viele Leute es schätzen.

Zend Framework: Documentation (http://framework.zend.com/manual/en/zend.view.scripts.html)
Der Syntax von view - das kann man auf der Seite auch erkennen ist im wesentlichen PHP pur und somit nix bensonderes.

 
h3ll
06-10-2009, 15:01 
 
Du findest kein einziges PHP eval oder js eval - kaum zu glauben.

Vielleicht sucht du mal alles durch auch die Demos.

JS evals gibt es überall - tonnenweise.

Und was haben die Demos mit dem Framework zu tun? Meine Güte...

 
onemorenerd
06-10-2009, 15:25 
 
Du findest kein einziges PHP eval oder js eval - kaum zu glauben.

Vielleicht sucht du mal alles durch auch die Demos.

JS evals gibt es überall - tonnenweise.
Demos und JS gehören nicht zum ZF. Lade dir mal die minimal Variante runter. Da findest du kein einziges eval().

Der Syntax von view - das kann man auf der Seite auch erkennen ist im wesentlichen PHP pur und somit nix bensonderes.
PHP ist doch an sich schon eine Templatesprache, wenn man es so benutzt. Warum soll man da nochmal eine neue Sprache erfinden? Was ist denn daran so "besonders" und wieso muss es überhaupt was "besonderes" sein? Imho muss es das gerade nicht, es muss ganz normal und weithin bekannt sein.

 
piratos
06-10-2009, 15:29 
 
Und was haben die Demos mit dem Framework zu tun? Meine Güte...

Na haste etwas gefunden? Aber die hunderte JS evals nicht ?

Tja man muss unter zend eval oder zend_eval_string einsetzen (wenn der server das her gibt) um einen PHP Code der in einer Variablen steckt ausführen zu können.
View beschränkt sich normal darauf simple zwischen ob_ Bereich ein externes Script zu includen und damit auszuführen und das Ergebnis abzufangen.

Das ist zu einfach, da Inhalte aller Art heute in DB's gehalten werden, d.h. der Inhalt liegt in einer VAR vor und der Inhalt kann seinerseits Verweise auf weitere z.B. Plugins enthalten.

Das kann eine Engine wie Smarty perfekt.

Und nun verrat mir doch einmal - ich arbeite normal nicht mit Zend - wie Zend das machen würde .

Und von den zahlosen Templateengines die ohne eval das machen können hätte ich gerne noch weitere Referenzen.
Zend reicht nicht, da Zend ein in sich geschlossenes Projekt ist, da kann ich nicht einfach View nehmen ohne das andere.

Also Belege bitte.

 
onemorenerd
06-10-2009, 15:39 
 
Na haste etwas gefunden? Aber die hunderte JS evals nicht ?Die bringt Dojo mit. Außerdem sind JS-evals nicht gleichzusetzen mit PHP-evals. Also lassen wir JS bitte außen vor.

Tja man muss unter zend eval oder zend_eval_string einsetzen (wenn der server das her gibt) um einen PHP Code der in einer Variablen steckt ausführen zu können.Falsch. Muss man nicht. Siehe oben.

Das ist zu einfach, da Inhalte aller Art heute in DB's gehalten werden, d.h. der Inhalt liegt in einer VAR vor und der Inhalt kann seinerseits Verweise auf weitere z.B. Plugins enthalten.Du sprichst davon, dass in der DB Daten stehen, die PHP-Code enthalten. Da ist ein grundsätzlicher Designfehler! Es geht nicht darum, wie man mit diesem Fehler am besten umgeht, ob mit eval() oder Alternativen. Der Fehler gehört vermieden/beseitigt. Es ist einfach nicht notwendig, dass PHP-Code irgendwann in einer Variablen vorliegt und ge-eval't werden muss.

 
piratos
06-10-2009, 15:41 
 
PHP ist doch an sich schon eine Templatesprache, wenn man es so benutzt.

Da hast du vollkommen recht, deswegen habe ich ja meine Engine TPLE geschrieben.

Ich verwende z.Z. Smarty , aber das ist für mich ein Auslaufmodell, parallel wird bei dem anderen Projekt meine Engine TPLE verwendet und die setzt in den Templates auf PHP direkt auf .

Nun geht es aber eben so etwas nicht nur um das simple includen von externen PHP Scripten, es geht dabei z.B. auch um Plugins, die widerum Templates aufrufen und in denen widerum andere Plugins stecken können.

Es geht also um Möglichkeiten direkt funktionelle Einheiten mit einsetzen zu können, wenn man sie benötigt.

Und es geht natürlich darum das Templates in der DB gehalten werden ebenso wie Inhalte aller Art und das ein Gesamtinhalt aus diversen Komponenten bestehen können die ihrerseits Inhalte aus DB Informationen beziehen und ihrersets andere Dinge einsetzen, die ebenfalls von der Engine erledigt werden müssen.

Das sind Dinge dir über PHP einfach hinaus gehen.

Smarty leistet das perfekt, ist aber wegen der eigenen Scriptsprache eigentlich daneben. Man schreibt im Smartysyntax um daraus eine PHP Script zu erzeugen - das halte ich dauerhaft nicht für gut.

Das mal als kleine Abschweifung zum Thema Templatengines.

Man kann Templateengines für blöd, krank oder sonst etwas halten, wer sie nicht einsetzt kann für sich ja glücklich sein, was Wartung betrifft ist das optimal und das ist ganz sicher nicht nur meine Meinung sondern die vieler zig tausender User von solchen Engines.

 
h3ll
06-10-2009, 15:44 
 
Na haste etwas gefunden? Aber die hunderte JS evals nicht ?

Was hat das PHP Framework mit JS zu tun?

Tja man muss unter zend eval oder zend_eval_string einsetzen (wenn der server das her gibt) um einen PHP Code der in einer Variablen steckt ausführen zu können.

Bitte Datei und Codezeile angeben. Nachdem sich die erste Behauptung als Blödsinn rausgestellt hat, glaub ich dir nix mehr ohne Quellenangabe, du "Fachmann".

View beschränkt sich normal darauf simple zwischen ob_ Bereich ein externes Script zu includen und damit auszuführen und das Ergebnis abzufangen.

_Du_ warst derjenige, der behauptet hat, dass es eval() verwendet, nicht ich.

Das ist zu einfach, da Inhalte aller Art heute in DB's gehalten werden, d.h. der Inhalt liegt in einer VAR vor und der Inhalt kann seinerseits Verweise auf weitere z.B. Plugins enthalten.

Aha. Sagt wer? Der Fachmann persönlich?

Das kann eine Engine wie Smarty perfekt.

Smarty kann nur eines Perfekt: Bugs produzieren.

Und nun verrat mir doch einmal - ich arbeite normal nicht mit Zend - wie Zend das machen würde .

Zend Framework: Documentation (http://framework.zend.com/manual/de/zend.controller.plugins.html)

 
piratos
06-10-2009, 15:46 
 
oben.

Du sprichst davon, dass in der DB Daten stehen, die PHP-Code enthalten. Da ist ein grundsätzlicher Designfehler!

Tut mir leid, jeder der sich mal mit CMS - Entwicklung beschäftigt hat wird dir sagen, das dieses ein gediegener Unsinn ist - veraltete Ansicht.
Ob das nun direkter Code ist oder indirekter (z.B. Smarty) ist dabei völlig unerheblich.

Aber wenn es deine Meinung ist - Ok akzeptiert.

 
h3ll
06-10-2009, 15:47 
 
Tut mir leid, jeder der sich mal mit CMS - Entwicklung beschäftigt hat wird dir sagen, das dieses ein gediegener Unsinn ist - veraltete Ansicht.
Ob das nun direkter Code ist oder indirekter (z.B. Smarty) ist dabei völlig unerheblich.

Ich hab mich mal mit CMS-Entwicklung beschäftigt und behaupte das Gegenteil.

Und jetzt?

 
piratos
06-10-2009, 15:48 
 
Smarty kann nur eines Perfekt: Bugs produzieren.

Nur wenn man keine Ahnung davon hat. Aber das kann man sich schnell aneignen, das haben schon viele tausend Anwender von Shop und CMS geschafftm warum du also auch nicht.

 
piratos
06-10-2009, 15:49 
 
Ich hab mich mal mit CMS-Entwicklung beschäftigt und behaupte das Gegenteil.

Und jetzt?

Mal - ok , ich mache das aktuell jeden Tag.

Solltest dir mal neue Erfahrungen zulegen oder auch nicht, ganz wie du willst.

Der Unterschied besteht in Erfolg oder eben nicht.

 
h3ll
06-10-2009, 15:51 
 
Mal - ok , ich mache das aktuell jeden Tag.

Solltest dir mal neue Erfahrungen zulegen oder auch nicht, ganz wie du willst.

Der Unterschied besteht in Erfolg oder eben nicht.

Ich hab genug Erfolg und Erfahrung und ich bleib bei meiner Meinung.

 
h3ll
06-10-2009, 15:53 
 
Nur wenn man keine Ahnung davon hat. Aber das kann man sich schnell aneignen, das haben schon viele tausend Anwender von Shop und CMS geschafftm warum du also auch nicht.

LOL! Ich war schon oft genug damit beschäftigt die Bugs von Smarty auszubessern oder zu umgehen. Bei mir brauchst du nicht mit dieser "wenn man keine Ahnung hat" Rede daherkommen.

Nur weil viele tausende Anwender gerade mal an der Oberfläche gekratzt haben und dabei keine Probleme haben, muss es noch lange nicht bedeuten, dass sie Ahnung haben.

 
hhcm
06-10-2009, 15:56 
 
Also man könnte den Thread hier bei #10 abhaken und den Rest ins Offtopic verschieben :baby:

 
piratos
06-10-2009, 15:56 
 
Bei mir brauchst du nicht mit dieser "wenn man keine Ahnung hat" Rede daherkommen.


Nun ich wollte dir nicht auf die Füsse treten.
Ich nehme an das du Probleme mit dem Einsatz der Smartyscriptsprache meinst, die Engine selbst ist ausserordentlich stabil.
Das sind keine Smartybugs das sind dann selbst fabrizierte über Templates, das muss man schon unterscheiden.
Du hast dich also mit den Fehlern anderer auseinandergesetzt, die im Zusammenhang mit Templates stehen.

 
piratos
06-10-2009, 15:58 
 
Also man könnte den Thread hier bei #10 abhaken und den Rest ins Offtopic verschieben :baby:


Ja habe ich ja schon gesagt für mich ist die Frage des TO längst erledigt, aber einige müssen ja immer nachsetzen.

 
h3ll
06-10-2009, 16:01 
 
Nun ich wollte dir nicht auf die Füsse treten.
Ich nehme an das du Probleme mit dem Einsatz der Smartyscriptsprache meinst, die Engine selbst ist ausserordentlich stabil.
Das sind keine Smartybugs das sind dann selbst fabrizierte über Templates, das muss man schon unterscheiden.
Du hast dich also mit den Fehlern anderer auseinandergesetzt, die im Zusammenhang mit Templates stehen.

Also kurz gesagt: Wenn ein Fehler auftritt, ist immer derjenige Schuld, der das Template geschrieben hat, und niemals Smarty selber. Hab ich das korrekt so zusammengefasst?

 
piratos
06-10-2009, 16:05 
 
Also kurz gesagt: Wenn ein Fehler auftritt, ist immer derjenige Schuld, der das Template geschrieben hat, und niemals Smarty selber. Hab ich das korrekt so zusammengefasst?

Smarty selbst ist seit langer Zeit so gut wie Bug frei, die Frage kannst du dir selbst bestätigen.

 
onemorenerd
06-10-2009, 16:06 
 
Tut mir leid, jeder der sich mal mit CMS - Entwicklung beschäftigt hat wird dir sagen, das dieses ein gediegener Unsinn ist - veraltete Ansicht.
Ob das nun direkter Code ist oder indirekter (z.B. Smarty) ist dabei völlig unerheblich.
Ich kenne dein CMS nicht. Erzähl doch mal, wie es funktioniert!
Kann der CMS-User in eine Textarea beliebigen PHP-Code schreiben, der wird dann in der DB gespeichert und beim Aufruf der Seite ge-eval't?
Junge junge, so ein Produkt würde ich niemandem empfehlen!

Was du weiter oben beschreibst, lösen andere CMS ungefähr so: Ein Modul bietet einen Block an. Der CMS-User kann den Block auf der Seite platzieren und ggf. konfigurieren. Bei der Konfiguration kann er vielleicht weitere Blöcke von anderen Modulen "einbetten". Dazu genügt aber ein Auswahldialog und ggf. weitere Konfigurationsschritte. Der CMS-User muss und darf keine einzige Zeile Code schreiben. Das ist sicher. Das ist einfach. Das ist gut.

 
h3ll
06-10-2009, 16:07 
 
Smarty selbst ist seit langer Zeit so gut wie Bug frei, die Frage kannst du dir selbst bestätigen.

Komisch, dass ich dann immer wieder neuen Bugs über den Weg laufe.

 
piratos
06-10-2009, 16:20 
 
Ich kenne dein CMS nicht.
Tja du wisst ja wo man downloaden kann.

Vielleicht hast du auch schon mal was von Rechten gehört und dem Unterschied zwischen ein CMS und einem Portalsystem.
Ich schreibe keine Portalsysteme als Opensource.

 
onemorenerd
06-10-2009, 16:30 
 
Ich will dein CMS aber nicht erst runterladen, installieren und durchklicken müssen.
Warum bist du nicht bereit, kurz zu beschreiben wie und warum du in deinem CMS eval() einsetzt? Soviel Gesprächsbereitschaft muss schon sein.

 
onemorenerd
06-10-2009, 16:37 
 
Habs inzwischen mal runtergeladen und nach eval() gesucht. Erster Fundort /lib/classes/class.usertagoperations.inc.php:54
if (!(@eval('function '.$functionname.'(&$params, &$smarty) {'.$code.'}') === FALSE))
$result = call_user_func_array($functionname, array(&$params, &$smarty));Ein weiterer Treffer in verwaltung/adduserplugin.php:81
@ob_start();
if (eval('function testfunction'.rand().'() {'.$code.'}') === FALSE)
{
$error[] = lang('invalidcode');
$buffer = ob_get_clean();
$error[] = preg_replace('/<br \/>/', '', $buffer );
$validinfo = false;
}
else
ob_end_clean();Du verwendest eval() hier beide Male um zu prüfen, ob der Code, der offensichtlich vom CMS-User eingegeben wurde, valider PHP-Code ist. Liege ich damit richtig?
Was passiert, wenn der CMS-User "} unlink(__FILE__); {}" eingibt?

 
PHP-Desaster
06-10-2009, 17:39 
 
eval in Templates ist ja eine Sache, um sehr einfach irgendwelche foreachs, etc. in HTML einzubetten, hat so aber nichts mit Smarty zu tun, weil dieses im Endeffekt nur wieder PHP erzeugt und per include + ob rendert.
Deine function-Konstrukte sehen dagegen sehr abenteuerlich aus. Schon mal php -l auf der CLI verwendet? In Kombination mit einer temporären Datei oder Shell-Pipes eine klasse und saubere Sache.

 
onemorenerd
08-10-2009, 13:27 
 
Und von den zahlosen Templateengines die ohne eval das machen können hätte ich gerne noch weitere Referenzen.
Gerade ist mir was über den Weg gelaufen: Templating Engines in PHP - Fabien Potencier (http://fabien.potencier.org/article/34/templating-engines-in-php) Dieses Twig kommt ebenfalls ohne eval() aus.

Das ist übrigens die erste Template Engine, die ich kenne, die sich für DSLs eignet. Denn man kann die Template-Sprache nicht nur erweitern, sondern auch bestehende Tags überschreiben und sogar den AST manipulieren. Das sind Features, die PHP als Template Engine nicht bietet und damit hat Twig eine echte Daseinsberechtigung.

 
fireweasel
09-10-2009, 17:13 
 
Habs inzwischen mal runtergeladen und nach eval() gesucht. Erster Fundort /lib/classes/class.usertagoperations.inc.php:54 ... Du verwendest eval() hier beide Male um zu prüfen, ob der Code, der offensichtlich vom CMS-User eingegeben wurde, valider PHP-Code ist. Liege ich damit richtig?
Was passiert, wenn der CMS-User "} unlink(__FILE__); {}" eingibt?

http://de.php.net/manual/en/function.php-check-syntax.php

Da gibts eine Riesenmenge von Userkommentaren, die das PHP-Syntax-Checking-per-Eval()-Problem in den Griff zu bekommen versuchen. Da werden geschweifte Klammern gezählt und halbe PHP-Quellcode-Parser gebaut. Einige Ansätze funktionieren sogar. ;-)

Die Funktion selbst war leider nur kurze Zeit offizieller Bestandteil von PHP.

 
recoil
22-12-2009, 18:15 
 
Danke Piratos fuer deine Vorlage, ich habe es jetzt hinbekommen.
Ich habe es fuer meine Website so in der index.php verwendet

<?php include($item['include']);?>:danke:

 
ragtek
22-12-2009, 19:03 
 
Ich kenne dein CMS nicht. Erzähl doch mal, wie es funktioniert!
Kann der CMS-User in eine Textarea beliebigen PHP-Code schreiben, der wird dann in der DB gespeichert und beim Aufruf der Seite ge-eval't?
Junge junge, so ein Produkt würde ich niemandem empfehlen!

Das vB macht es zB so;)

Aber ja,
Ich würde den Code einmal aus der DB lesen und in eine Datei schreiben(cachen).
Das erspart doch die DB Abfrage.

 
onemorenerd
22-12-2009, 22:09 
 
Das vB macht es zB so
Wußte ich gar nicht, habe vB aber auch noch nie verwendet oder weiterempfohlen. Werde ich auch nicht. (http://www.vbulletin.com/forum/showthread.php?330059-My-forum-is-hacked&highlight=eval%28%29%27d)

@fireweasel: Syntaxprüfung ist (wäre?) zwar nett, schützt aber nicht vor semantisch "böswilligem" Code. Das geht nur durch kontrolliertes Ausführen in einer Sandbox (z.B. VM). Im Webumfeld völlig abwegig.

 
fireweasel
23-12-2009, 17:28 
 
Wußte ich gar nicht, habe vB aber auch noch nie verwendet oder weiterempfohlen. Werde ich auch nicht. (http://www.vbulletin.com/forum/showthread.php?330059-My-forum-is-hacked&highlight=eval%28%29%27d)

Parse error: syntax error, unexpected T_STRING in /home/medkaau/public_html/vb/index.php(565) : eval()'d code on line 2

Und dieser Angriff wurde nur entdeckt, weil auch der "pöse Hacker" seinen Quellcode vor dem Upload nicht auf Syntax-Fehler gecheckt hat. :D


@fireweasel: Syntaxprüfung ist (wäre?) zwar nett, schützt aber nicht vor semantisch "böswilligem" Code. Das geht nur durch kontrolliertes Ausführen in einer Sandbox (z.B. VM). Im Webumfeld völlig abwegig.

Wenn ich mich recht erinnere (das ist schon ein Weilchen her), bin ich davon ausgegangen, dass der PHP-Quellcode von einem Menschen eingegeben wird, der dem Webmaster wohlgesonnen ist, also ein Kollege, Mitarbeiter oder der Site-Betreiber selbst. Eingaben anderer Benutzer ist selbstverständlich grundsätzlich Böswilligkeit zu unterstellen. Hab mir den Quellcode des diskutierten CMS aber nicht näher angeschaut.

Ich bin zwar kein notorischer eval()-Gegner, aber wer diese Funktion anwendet, sollte ganz genau wissen, was er oder sie tut. Die meisten wissen das offensichtlich nicht.

 
ragtek
23-12-2009, 21:20 
 
Nur um auf Pluginsysteme zurückzukommen.

Im Endeffekt ist es doch egal, ob ein System eval oder etwas anderes benutzt, das eigentliche Problem liegt wie immer beim Benutzer.

Es ist doch egal ob man ein System durch Dateiänderungen laut Anweisung, eval oder require_once verändert.
Über jede von den genannten Möglichkeiten kann böser Code eingeschleust werden;)

 
onemorenerd
29-12-2009, 09:51 
 
Und dieser Angriff wurde nur entdeckt, weil auch der "pöse Hacker" seinen Quellcode vor dem Upload nicht auf Syntax-Fehler gecheckt hat. :D
Der Hacker hat vielleicht einfach eine Reihe bekannter Exploits durchprobiert bis er einen funktionierenden fand. Die Fehlermeldungen haben ihn dabei nicht gestört. Der Angriff wurde evtl. erst entdeckt, als das Kind schon im Brunnen lag und man des Kindes Tagebuch^WLogfiles las.
Es geht aber gar nicht ums gehackt werden. Das kann auch ohne eval passieren. Es geht vielmehr darum, dass man so einer eval-Fehlermeldung nichts hilfreiches abgewinnen kann. Ge-eval-ter Code lässt sich einfach schlecht debuggen.

Wenn ich mich recht erinnere (das ist schon ein Weilchen her), bin ich davon ausgegangen, dass der PHP-Quellcode von einem Menschen eingegeben wird, der dem Webmaster wohlgesonnen ist, also ein Kollege, Mitarbeiter oder der Site-Betreiber selbst.In meiner Erinnerung waren es die Signaturen von Benutzern. Egal ... geht ja ums Prinzip. Und da ist das mit dem Vertrauen so eine Sache - weiß denn ein Site-Betreiber überhaupt, dass sein vB rum-eval-t?

 
ragtek
29-12-2009, 10:45 
 
Weiß der "durchschnittliche" Seitenbetreiber überhaupt, wie seine Seite funktioniert?;)

Meiner Meinung nach, installieren viele fertige Pakete ala joomla, phpbb, konfigurieren diese und das war damit für sie.
Merkt man doch immer wieder in den Supportforen für die einzelnen Produkte

 
onemorenerd
29-12-2009, 11:54 
 
Weiß der "durchschnittliche" Seitenbetreiber überhaupt, wie seine Seite funktioniert?
Weiß er nicht und kann/soll er auch nicht wissen.
Es ist doch egal ob man ein System durch Dateiänderungen laut Anweisung, eval oder require_once verändert.
Über jede von den genannten Möglichkeiten kann böser Code eingeschleust werden.Dateiänderungen und require gehen Hand in Hand, wenn es um Code Injection geht. Der Unterschied zu eval ist, dass man sich vor unerlaubten Veränderungen der eigenen Dateien ziemlich einfach schützen kann. Man vernagelt den Dateisystemzugriff aus dem Netz und sichert alle Dateioperationen einer Applikation ab. Der Code, der durch eval gejagt wird, kommt nicht aus einer Datei. Der kommt aus einem nicht-dateibasierten Storage, z.B. einer DB oder live aus Benutzereingaben (run-once). In beiden Fällen muss man sicherstellen, dass der Code nicht schädlich ist. Das muss zwangsläufig direkt während der Ausführung geschehen, denn Code kann sich bei jeder Ausführung anders verhalten. Wirklich sicheres eval benötigt also eine Sandbox, sprich VM. Zu diesem Aufwand steht der Nutzen von eval in keinem gesunden Verhältnis.

 
ragtek
29-12-2009, 12:26 
 
Ja, ich teile (fast komplett) deine Meinung, aber der Trend geht doch in eine andere Richtung (wo ich dagegeben bin, es gibt wie wir uns beide einig sind, zu viele Sicherheitsbedenken, aber der 0815 Benutzer will es meißt so).

Applikationen wie zB das Wordpress, das WBB3 erhalten automatische Updateprozesse und One Click Erweiterungsinstallation, die es ermöglichen, nur den Erweiterungennamen reinschreiben, und das Skript verbindet sich mit dem Server, lädt das Archiv runter, entpackt es und installiert alles unnötige.

Hier sind die Sicherheitsrisiken noch viel enormer.
Man stelle sich nur mal ein gehacktes Archiv vor....
Aber egal, ich glaube das es hier schon extrem in den Offtopicbereich ausartet...

 
unset
29-12-2009, 12:41 
 
Ist doch egal, ist doch schon Offtopic.

Was das WP-Beispiel angeht: Ich persönlich nehme lieber ein Auto-Update-Konzept in Kauf, als das tausende ungepatchte WP-Versionen als Spamschleudern missbraucht werden. So gesehen kann man hier fragen, was passiert wenn die Debian-Repos Schadcode verteilen (was ja übrigens mindestens schon einmal passiert ist).

 
ragtek
29-12-2009, 12:47 
 
Echt, das gab es schon mal? Garnicht mitgekriegt. Danke für den Hinweis.

Aber um auf dein Beispiel einzugehen.
Nun stell dir mal eine gehackte Version vor, die per Auto Update zu zig Tausenden Benutzern kommt=> noch größere Spamschleuder möglich;)

Da kämmen ja auch ganz andere Szenarien in Frage (mächtiges Botnet bis es nicht entdeckt wird)

Edit:
Aso, du meinst ein Debian Repo. Ich bezog mich auf WP...
Sorry

 
unset
29-12-2009, 12:52 
 
Naja, das ist nun ein bisschen an den Haaren herbei gezogen. Ein solches würde jedem halbwegs fähigen Systembetreuer sofort auffallen. Im besagten Fall war es auch kein absichtlicher Schadcode, sondern - wenn ich mich recht erinnere - schlicht und ergreifend ein mangels Reviews eingeschlichener Bug, der allerdings dafür sorgte, dass Keys plötzlich sehr schwach wurden. Das wurde wohl auch ausgenutzt.

Edit: Und hier ist auch der Link: Debian -- Security****Information -- DSA-1571-1 openssl (http://www.debian.org/security/2008/dsa-1571)

 
onemorenerd
29-12-2009, 13:35 
 
So ein Auto-Update/Install-Prozess hat nichts mit eval zu tun. Da werden nur ein paar Files von irgendwoher gezogen, gespeichert und/oder in einer Plugintabelle registriert. Das funktioniert alles ohne eval und beweist einmal mehr, dass grenzenlose Flexibilität sehr gut ohne eval möglich ist.
PHP wird durch eval nicht mächtiger. Nur unsicherer.

Dass man Dateien von "irgendwoher" nicht trauen sollte, ist klar. Es gibt durchaus brauchbare Lösungen dafür - Identitätsprüfung, Zertifizierung, ... - aber letzenendes muss man immer irgend jemandem* vertrauen oder den Code vor der Installation selbst lesen.

*) Die Auto-Update-Mechanismen vieler Betriebssysteme funktionieren prinzipiell genau so. Der Updater connected sich zu einem unbekannten Server und lädt Dateien mit unbekanntem Inhalt. Millionen User vertrauen blind darauf, dass der ganze Prozess "sicher" ist. Überprüfen kann man das kaum.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:35 Uhr.