So, hatte mir das Modul schon Montag-Nacht angeguckt, hatte aber keine Lust mehr eine Antwort zu schreiben. Habe ganz vergessen, dass ich das unbedingt noch machen wollte.
Vorweg: In dem Zustand kann ich vor der Installation des Scripts nur abraten. Ich habe einige Fehler und Sicherheitslücken entdeckt. Zudem ist es an einigen Stellen eher schlecht in ilch integriert, wie man das von den hier bereitgestellten Modulen kennt.
SQL-Injections und XSS
Problematisch ist, dass alle User-Eingaben ungefiltert als SQL ausgeführt werden und in der Datenbank gespeichert werden. Theoretisch wäre eine "Übernahme" der Homepage und ähnliches möglich.
Gegen Cross-Site Scripting (XSS) ist das Script zwar auch nicht geschützt, doch die davon betroffenen Daten werden nicht direkt ausgegeben. Das reicht aber nicht.
==> escape-Funktion von ilch nutzen. Da muss jede User-Eingabe einmal durch, damit keine bösen Überraschungen kommen
Fehler
- Strings müssen immer in Anführungszeichen (" bzw. '). Das gilt auch bei if-Bedingungen. "if($do==voting)" beispielsweise geht nicht. Da wird immer true kommen, da php das voting für eine Konstante hält. "if($do==
"voting
")" müsste es richtig sein.
- Bei der Installation hast du einen Denkfehler. Du versuchst auf Funktionen von ilch zuzugreifen, die nicht geladen sind. "db_connect" befindet sich in include/includes/func/db/mysql.php. Die Datei müsstest du einbinden, damit die Installation einwandfrei funktioniert (kann nicht mit Sicherheit sagen, ob das die einzige Datei ist).
Noch einfacher ist es, wenn du das fertige Installation-Script nimmst, dass es
hier im Downloadbereich gibt.
- Dein Voting lässt sich sehr einfach manipulieren. Du übermittelst per GET die User-ID des aktuell eingeloggten Users. Diese User-ID kann jedoch beliebig geändert werden, sodass ich jetzt für tausend andere User abstimmen kann, die es noch nicht mal geben muss.
==> Du kannst das umgehen, indem du die GET-Variable einfach komplett weg lässt und wie am Anfang auch "$_SESSION['authid']" verwendest.
Integration in ilch
Hier gibt es einige Sachen, die du besser machen könntest. Ich zähle die einfach auf. In der
Entwicklerdokumentation findest du weitere Infos dazu.
- Datenbank-Funktionen von ilch nutzen. Die Vorteile sind, dass das präfix automatisch gesetzt wird und theoretisch das nutzen von anderen Datenbanken möglich wäre
- Templates nutzen. Du hast zwar ein Template, doch da steht nicht wirklich was drin.
- Mit der Menu-Klasse könntest du ganz auf GET verzichten. Das sieht schöner aus.