Hallo,
für die Leute die noch das ReCMS oder das HoloCMS benutzen und nicht gerade wirklich Ahnung in der Technik haben, wird dieser Thread wesentlich interessanter sein. Hier mit möchte in den Anfängern eine mögliche Hilfestellung geben, die das fixen von Buggs erheblich leichter macht. Ich konzentriere mich hier nur auf die Standard Sachen. Die Tipps dienen nicht zur Komplettlösung eines Problemes, lediglich nur eine kleine Hilfestellung.
Tipp Nr. 1 - Global error_reporting und vereinzelnde reports
Leider ist das ReCMS nicht darauf ausgelegt Fehlermeldungen innerhalb weniger Sekunden zu entdecken und zu fixen. Die Entwickler haben an jeder Ecke mit error_reportings gespart.
Falls ihr eigene Scripts im ReCMS verwendet wäre es ratsam oben im Script den Befehl "error_reporting(E_ALL);" auszugeben. Dieser Befehl zeigt dir alle Fehler im Script an, die man beheben sollte.
Falls du einen Fehler auf deiner me.php hast oder vielleicht irgendwo anders wird dir häufig eine Fehlermeldung ausgegeben die dich zu einer Zeile weiterleitet. Meist sind diese Zeilen MySQL Abfragen. Viele deren MySQL Abfragen sehen so aus...
<?php $sql = "SELECT username FROM users WHERE username = '".$username."'";
An sich ist im Script nichts falsch, doch meistens befindet sich in der Datenbank der Fehler, worauf viele Anfänger natürlich nicht kommen. Deshalb setzen wir auch "or die mysql_error();" ein. Das Semikolon verrutscht sich.
<?php $sql = "SELECT username FROM users WHERE username = '".$username."'" or die mysql_error();
Reloaden wir die Seite wo uns die Fehlermeldung angezeigt wurde, könnten wir eine ganz andere Fehlermeldung erhalten. Meistens steht dort, dass gewisse Tabellen in der Datenbank nicht vorhanden sind. Diese müssen ersetzt werden. Wurde diese ersetzt könnte wieder eine Fehlermeldung kommen. Ist die mit "WHERE" beschmückt handelt es sich dann um eine fehlende Spalte in der Tabelle. Der Spaltenname wird immer in der Fehlermeldung angezeigt. Einfach mit "Design Table (Navicat)" die Spalte nachtragen. Natürlich sind die Basics von MySQL gefragt ( varchar, int etc )
Tipp Nr. 2 - Strings escapen
Viele Strings, vor allem im Housekeeping, werden nicht mit mysql_real_escape versehen. Das könnte dazu führen, dass man SQL Injectionen ausführen könnte. Besonders im Housekeeping im Securitycode_field gibt es eine weit verbreitete Lücke die immer noch viele User mit sich tragen. Fragt mich bitte nicht wer so schlau sein kann und dort eine Lücke einbaut. Beispielweiße dort könnten wir direkt die POST Eingabe escapen.
$form_code = mysql_real_escape_string($_POST['codeword']);
Der Securitycode wäre geschützt und eine SQL_Injection ist dort zumindestens nicht mehr machbar. Testet dies bei vielen anderen Input_fields aus, vor allem im Index, da Sachen wie r_password und r_username teilweise sehr anfällig auf Cookies und SESSIONS reagieren und man dort einen großen Spielraum hat. Wir erinnern uns zurück an den ausgeführten Live-Hotel Hackangriff. Der Hacker konnte sich Cookies und ID's mittels über die beiden r_username und r_password fields holen und diese letztendlich gegen Live-Hotel ausführen.
Tipp Nr. 3 - XSS im motto_field fixen
Erschreckenderweise sind immer noch viele mit der motto_field XSS betroffen. Aktuellstes Opfer das iBabbo.ws das sich mit über 80 User am Tag hält. Mittlerweile wurde dieser Fehler bereits behoben, dennoch kann ich mir durchaus vorstellen das die XSS im motto_field bei einigen immer noch existieren.
Tipp Nr. 3.2 - XSS in den News fixen
Eine Lücke die zwar schon öfters gefixt wurde dennoch mehrmals vorhanden ist. Die News kann die ganze Homepage "zerstören". Verbietet auffällige Sonderzeichen wie ', ">
Tipp Nr. 4 - Zugriff kontrollieren
Kontrolliert den Zugriff auf bestimmte Seiten die nur für Mitarbeiter gedacht sind. Legt mehrere Passwörter an und unterschätzt die .htaccess nicht. Spart nicht mit boolean in den SESSIONS. Eine Sicherheitsmaßnahme die vorrangig ist, siehe Tipp 3 und 3.2!
Tipp Nr. 5 - Offline ziehen und arbeiten
Zieht niemals Sachen vom Netz wenn ihr auf eurem Server seid, ebenso solltet ihr keine Sachen vom Server aus ziehen. Maleware, Trojaner, Backdoors und Viren können den Server angreifbar machen.