#1
| |||
| |||
eval oder doch evil ?Ich bin grade wie viele andere auch in der Entwicklung der perfekten Boardsoftware. Meine Software legt vor allem Wert auf Performance und Geschwindigkeit. Daher habe ich mich auch dazu entschlossen, keine Templateklasse, sondern die eval() Funktion für die Ausgabe zu benutzen. Das Template wird zuerst eingeladen, in Blöcke geteilt, in den einzelnen Blöcken werden dann die Variabeln ersetzt und am Ende jeden Scriptes alle templates und Variabeln gekillt, die in folgenden Scripte nicht mehr benötigt werden. Der Vorteil liegt schlicht und ergreifend darin, dass ich jedes Template nur einmal "anfassen" muss, aber gleichzeitig auch die Anzahl der Templates übersichtlich bleibt. Die Performance lässt jedes mir bekannte Board im Regen stehen. 10.000 Zugriffe von Apachebench werden in ca. 160 Sekunden abgearbeitet ohne, dass das Board merkbar langsamer wird. Die Seitengenerierung auf den anderen Seiten liegen bei 50 simulaten Zugriffen durch AB immer noch bei 0.004 (Memberlist mit 50 Membern) und 0.019 Sekunden (viewtopic mit 15 Posts) - und das bei einem Funktionsumfang, der dem vBulletin doch sehr nahe kommt (der Kalender fehlt noch). An sich bin ich also sehr zufrieden. Auf der Suche nach Informationen bin ich immer wieder auf so Sätze gestossen, wie "eval ist unsicher" oder "eval ist eine große Quelle für Sicherheitslöcher" usw. Nun zu meinen Fragen: 1. Inwiefern ist eval unsicher? Da ich auf Sicherheit sehr viel Wert lege, werden bei absenden eines Formulars immer die referer überprüft. Das Script ist so geschrieben, dass Register Globals off sein kann und Report E_ALL liefert auf keiner Seite einen Fehler. Reicht dass, um sich sicher zu fühlen oder hab ich noch was vergessen? 2. Wonach muss ich überhaupt suchen? Regelmässig tauchen ja z. B. beim PHPBB2 Bugfixes auf, wo meistens was von "gefährlich" beisteht. Wie teste ich also am besten meine Software auf Fehler bzw. auf Sicherheitslücken? Alles, was ich bei google und auch hier im Board gefunden hab, war alles nicht der "wahre Jakob", also hoffe ich mal, dass ein paar Macher mir etwas auf die Sprünge helfen können. |
#2
| |||
| |||
Hi. Erstmal wüsste ich gern, ob du die Software hinterher auch veröffentlichst, und wenn ja, welches Lizenzmodell du dir vorgestellt hast (wäre nämlich von deiner Beschreibung her ausgesprochen interessiert... "). Bin leider auch nicht so der Sicherheitsprofi, aber die größte Sicherheitslücke, die ich bei eval sehe ist folgende: Wenn der User eine Eingabe ausführen kann (per Formular, URL, o.ä.) und du die Eingabe in dein eval mit einbindest. Spontan fällt mir nichts ein, wo das sinnvoll / möglich wäre... trotzdem ein Beispiel, dass mit einem einfachen addslashes ausgehebelt werden könnte...: PHP-Code: Code: ".(($db->query('DELETE FROM tabelle')) ? 'Alles gelöscht' : 'nix gelöscht...')." Jedenfalls ist eval immer dann gefährlich, wenn Besucher die Möglichkeit haben ihren eigenen Code einzuschleusen. Wie gesagt... htmlentities & addslashes sollten da zur Absicherung ausreichen. Alle angaben ohne Gewähr... " Die Sicherheitsfehler beim phpBB2 waren teilweise XSS-Möglichkeiten. Dazu gibts hier irgendwo schon ein Thema. Bevor ich das gelesen hab wusste ich ehrlich gesagt auch nicht, was das sein soll... (und trotzdem konnte ich keine derartigen Lücken in meinen Sachen finden. ) Na ja... hoffe dir irgendwie geholfen zu haben... " __________________ Patrick Gotthardt Patrick Gotthardt on Software |
#3
| ||||||
| ||||||
Zitat:
Zitat:
Denn durch die Benutzung von eval() wird das ganze nicht schneller - eher langsamer. Zitat:
Schon mal drüber nachgedacht das ganze einmal per Script machen zulassen und dies dann zu cachen? Zitat:
Und wenn ich ein paar Funktion in Board X ausbaue die ziemlich zeitraubend sind, dann ist klar, dass das ganze schneller ist. Zitat:
Zitat:
|
#4
| |||
| |||
Es gibt übrigens schon Template-Klassen, die genau auf dem eval() Prinzip basieren. Aber diese sind mit Sicherheit nicht schneller als andere Template Klassen und aufgrund der zusätzlichen Sicherheitschecks die man machen müsste eher langsamer... Bei einem Forum beeinflusst das Template-System die performance bei weitem nicht so sehr wie die Gestaltung und Umfang der Datenbankabfragen - Dieses ist m.E. der Flaschenhals der meisten Forensysteme... |
#5
| |||
| |||
Erstmal Danke für die ganzen Antworten. Die Geschwindigkeit kommt auch nicht allein durch die Templates, sondern zu einem großem Teil durch verschiedene Cachingmechanismen. Viele Daten, die sich selten bis fast nie ändern, wie die Boardkonfiguration, der Empfang von Nachrichten, Boardstats (wie viele User maximal online am usw.), Ranks, eigene Userdaten usw. werden immer wieder in Textdateien zwischengespeichert, bei Aufruf included und nur bei Änderungen neu geladen. Dadurch spar ich mir ne ganze Menge Datenbankabfragen. Meine Indexseite hat je nach Level (also Moderator, Admin oder Gast) noch zwischen 4 und 7 Datenbankabfragen. Da sind aber auch schon Funktionen wie "Wie viele User lesen in welchem Forum" und "Gelesene Topics in der Datenbank" schon mit drin. Im Vergleich dazu hat z. B. das phpBB+ schon 88. Einige Daten hab ich in verschiedenen Tabellen doppelt gespeichert. Das erhöht zwar geringfügig den Speicherbedarf, aber brauch ich nicht für einen Wert eine 2. Tabelle mit einzubeziehen. Insgesamt hab ich also schon mehr gemacht als nur die eval Funktion. Vergleichsweise hab ich das punBB und das phpBB installiert. Und das punBB ist trotz weniger Features und ohne Templates nur 20 % schneller. Das phpBB ist 10 mal langsamer und das phpBB+ ist ausser Konkurrenz, weil der Server bei nem AB Test innerhalb weniger Sekunden abkackt. Testserver ist ein P4 2 Ghz, 512 MB Ram mit installiertem Turck MMCache. Die 3 Boards sind alle in der Standardversion installiert, also ohn Änderungen an der Konfiguration oder an den Scripten. Wenn ich das richtig verstanden habe, entspricht ja eval in ungefähr dem echo Befehl, mit dem Unterschied, dass PHP Variabeln direkt ausgegeben werden können. Demnach sollte also die Performance relativ gut sein. Dazu muss ich sagen, dass ich pro Datei nur 1 - 4 mal den eval Befehl verwende. Jedes Template wird nur einmal geladen, in ein Array gepresst und dann pro Block einmal mit Variabeln ausgefüllt. Wenn ich diese Templates jetzt cache steht ja in den Templates statt dem Platzhalter <? echo $variable ?> großartig mehr ändert sich ja nicht. Also ob ich jetzt schreibe echo (bei mir halt eval) "alles" oder echo $irgendwas und dann echo $nochwas usw. sollte doch für die Leistungsfähigkeit der Templates keine Rolle spielen. Wenn ich da jetzt was falsch verstanden hab, verbessert micht. |
#6
| ||||||||
| ||||||||
Zitat:
Je mehr Dateien -> desto mehr Zugriffe auf die Festplatte Ich bevorzuge eher die Methode gewisse Daten serialisiert in der DB abzulegen und alles in einem Rutsch in einem Query abzurufen. Die Konfiguration selbst, landet aber in einer eigenen Datei. Genauso wie meine vorbereiteten Templates. Diese werden als fertiger PHP Code zwischengespeichert und nur bei Änderung aktualisiert. So kann ich if-else Konstrukte, eingebettete Templates usw. performant realisieren. In diesem fall nutze ich als die gleiche Methode wie ciruZ und das in einigen Projekten sehr erfolgreich. Zitat:
Aktuelle Version -> http://felovia.crazy-board.de/ Zitat:
Zitat:
Solltest du auf einem Server testen, auf dem mehrere Kunden liegen, vergiss meine Aussage. Darüber hinaus zeigt sich die Qualität eines Boardes erst wenn eine gewisse Anzahl an Datensätzen in den wichtigsten Tabellen vorhanden ist, der PHP code kann noch so gut sein, aber wenn dir ein misslungenes Tabellen Schema alles kaputt macht ist es ärgerlich. Zitat:
[ ] du hast dir das PHP Manual angesehen [ ] du hast dir die Beschreibung von eval() dort angesehen [ ] du hast dir die Beschreibung von echo() dort angesehen Zitat:
Zitat:
Zitat:
__________________ Fabian Martin Fabian Martin Blog | Twitter | XING |
#7
| |||
| |||
Beitrag gelöscht. Geändert von printf (15.02.2008 um 14:01 Uhr). |
#8
| ||||
| ||||
Ich möchte hier nicht meine Gedanken zu dem Thema äußern, aber zumindest darauf hinweisen, daß die Skalierbarkeit von Foren heutzutage eine große Rolle spielt. Um eine hohe Skalierbarkeit zu erreichen ist es manchmal notwendig (oder unausweichlich), daß bei "sehr" geringen Userzahlen/Beiträgen usw. es wirklich länger dauert... Die meisten Foreninstallationen sind ja im mittleren Bereich anzusiedeln, dann gibt es noch die richtig großen Foren. Foren mit nur 10 usern und einem Beitrag pro Monat haben wohl die wenigsten. Außerdem frage ich mich was das phpBB+ in deiner Untersuchung zu suchen hat... das hat doch nichts mehr mit Performance zu tun. Ich hoffe das dein "Projekt" nicht in der Versenkung verschwindet, klingt interessant (wenn man deinen Aussagen trauen darf). __________________ Meik Sievertsen phpBB Development Team Leader phpBB3 Development | phpBB / Projekte: mobilfunk-guenstiger | stromtarife vergleichen/wechseln |
#9
| |||
| |||
Also die Entwicklung wird auf jeden Fall weitergehen. Nach langem Überlegen bleib ich allerdings bei der eval Variante, weil sie in meinen Tests zumindest einfach das schnellste ist und die Usability in den Templates einfach klasse ist. Ich kann Kommentare rausfiltern, ausführliche Informationen dazu schreiben, den Quelltext optimieren usw. All das ist mit anderen Templatemodulen oder auch mit eigenen Varianten einfach zu umständlich und auch immer langsamer gewesen als in meiner Version. Der Unterschied zwischen template und nicht template liegt bei etwa 0.005 ms für 3 templates (header, footer, index). Also für meinen Begriffe superschnell. Das Sicherheitsrisiko ist vielleicht etwas höher, auch wenn ich nix genaues darüber gefunden hab, aber ich benutze ja auch eval nur zur Ausgabe. Der normale Besucher kann also gar keinen Code einschleusen. Die einzige Erweiterung, die ich noch dazu dichte, ist die Funktion, dass optimierte Templates in einer extra Datei zwischengespeichert werden. Danke für die ganzen Vorschläge und Ideen. |
#10
| |||
| |||
Oh oben war ein Fehler - ich meinte 0.005 SEKUNDEN - nicht ms. Öhm, getestet hab ich das Smarty-System und PHPLib. Beides hat sich aber für meine Begriffe als äusserst schwerfällig und unhandlich herausgestellt. Die Integration über die Klasse ist zwar an sich ne feine Sache, aber "Funktionsmonster" brauch ich einfach nicht. Mein Board soll eher auf den Punkt programmiert sein. Zusätzlich hatte ich auch mal diese modifizierten Templatefunktionen vom PHPBB2 getestet. Die Integration dieser Module ist natürlich sehr aufwendig und ich hab auch nicht alle bis zum Erbrechen getestet. Von diesen 3 Lösungen hat mir eigentlich die Smarty Version am besten gefallen - zumal Sie auch die schnellste war. |
#11
| |||
| |||
Für meine Zwecke ist es zu groß und zu unhandlich. Wenn ich ne Telefonnummer notiere, öffne ich auch nicht Word. |
Stichworte |
- |
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Würde sich ein Wechsel auf wbb2 oder vBulletin wirklich lohnen? | Silmarillion | Forensoftware | 61 | 01.11.2005 17:13 |
CMS oder Portalsystem für mich? | DJ Iltiz | Blog, CMS, Wiki und Sonstige | 11 | 19.02.2005 10:50 |
(Welches) CMS – oder anderes Skript? | Winters | Blog, CMS, Wiki und Sonstige | 19 | 06.04.2004 21:09 |
THWB 2.84 (2.9) oder phpBB 2.2? | Fabchan | Forensoftware | 15 | 13.01.2004 16:17 |
Forum und Board oder doch ein FoBo/BoFo ;) | Michael Przybyla | Boardunity-Talk | 6 | 08.09.2003 19:42 |