[GUIDE] Wie programmiere ich ein gutes CMS (für Habbo)?

  • Sehr geehrte RetroTown Community!

    Da mittlerweile immer mehr User ein eigenes Content-Management-System auf die Beine stellen wollen, möchte ich einen Guide verfassen der Dir bei der Programmierung helfen kann.

    Zunächst möchte ich folgendes erwähnen:
    Es ist noch kein Meister vom Himmel gefallen! Du wirst, sofern es dein erstes CMS ist, oft auf die Beine fallen und an vielen Sachen scheitern - das ist aber normal! Viele Entwickler fangen so an. Du musst die Homepage auch nicht im objektorientierten Style schreiben!
    Als Beispiel nenne ich die Plattform "Facebook", welche Anfangs auch prozedural geschrieben war, sie wurde erst später umgeschrieben.

    Gliederung des Guides

    • Sicherheit
      • CSRF (Cross-Site-Request-Forgery)
      • SQLi (SQL injection)
      • XSS (Cross-Site-Scripting)
    • Objektorientiert oder Prozedural?
      • Objektorientierte Programmierung
        • Pattern? MVC!
      • Prozedurale Programmierung
    • Design (UI)
      • Animationen - Ja oder nein?
      • Flat - Ja oder nein?

    1. Sicherheit
    Habbo Retros sind dafür bekannt, in Punkt Sicherheit nicht das Gelbe vom Ei zu sein. Genau aus diesem Grund möchte ich die drei wichtigsten und gefährlichsten Sicherheitslücken ansprechen.

    1.1. Cross-Site-Request-Forgery
    CSRF war bis vor einem Jahr noch so gut wie keinem in der deutschen Szene bekannt und doch ist es so gefährlich. Doch was geschieht dabei eigentlich?

    Zitat von RetroTimes

    Beim sogenannten Cross Site Request Forgery kurz CSRF oder XSRF handelt sich es sich um eine indirekte Angriffstechnik auf verwundbare Stellen einer Webseite. Dabei wird eine Person aufgefordert, eine URL aufzurufen, die (versteckt) eine Aktion auf der Homepage auslöst - so zum Beispiel das Ändern oder Speichern von Einstellungen. Im Namen des eingeloggten Benutzers, der die URL aufruft, wird das jeweilige HTML-Formular ausgefüllt und anschließend an den Server abgesandt - ohne, dass das Opfer davon Wind bekommt. In letzter Zeit treten mehr und mehr Vorfälle auf, bei denen Angreifer diese Technik auch für die - wenn man's so nennen darf - Übernahme eines Retro Hotels anwenden oder versuchen, Manipulationen an einem Hotel durchzuführen.


    Wie kann man sich davor schützen?
    - durch diverse Skripte, welche sogar schon hier, auf RetroTown, veröffentlicht wurden!
    ([PHP] Sicherheitssystem - AntiCSRF oder [PHP] CSRF Protection by Steve)

    1.2. SQLinjection
    SQLinjections erragen in der Szene großes Ansehen und werden nahezu tagtäglich an Retros ausprobiert. Die Erklärung ist ganz simpel:
    Bevor ein Wert in eine Datenbank-Tabelle eingetragen oder geupdatet werden kann, sollte er davor "escaped" werden. Ist dies jedoch nicht der Fall, so kann der Angreifer Befehle über diesen Wert ausführen lassen.
    Problemlösung:
    bei mysql_* http://php.net/manual/de/func…cape-string.php
    bei mysqli:: http://php.net/manual/de/mysqli.real-escape-string.php

    Beispiel (mySQLi):

    Spoiler anzeigen


    Unsicher:
    Sicher:

    1.3. Cross-Site-Scripting
    XSS ist wohl die bekannteste Methode auf RetroTown. Durch diese Sicherheitslücke ist es möglich, HTML5-Codes auf der Homepage ausgeben zu können.
    Beispiel: Der User wählt in einem diversen Habbo Retro als Motto "<script>alert(1);</script>".
    Lösung: Die Ausgabe, sprich der String, muss erst noch konvertiert werden. Dazu gibt es in PHP mehrere Methoden, wobei ich auf htmlspecialchars (http://php.net/manual/de/function.htmlspecialchars.php verweisen möchte.).
    Nutzung:

    Spoiler anzeigen


    Unsicher:
    Sicher:

    2. Objektorientiert oder Prozedural?
    Das ist die wichtigste Frage - wie wird der Code aufgebaut sein?
    Zunächst möchte ich nochmals etwas wichtiges Erläutern: Lass dich von einem runtermachen, wenn du kein OOP kannst!
    Wenn du kein OOP beherrschst, ist die Frage für dich schon beantwortet: Prozedural! (natürlich darfst und sollst du weiterlesen :P)

    2.1 Objektorientierte Programmierung
    Bei OOP stellt sich die Frage, ob man ein Framework benutzen möchte und/oder welches Pattern benutzt wird, falls man sich für eins entscheidet). Ich beziehe mich ausschließlich auf das Model-View-Controller Pattern.
    MVC Beispiel:

    Grafik


    2.1.1 Pattern? MVC!
    Das Model-View-Controller Prinzip hilft dir, den Sinn von OOP einzubehalten. Es sollte im Idealfall alles voneinander trennen.
    Der User bekommt ausschließlich die View zu sehen. Diese wird vom jeweiligen Controller zugewiesen und erhält alle wichtigen, nicht statischen Infos aus dem Model.
    Hier ist eine genauere: http://net-developers.de/2009/07/24/mvc…nackig-erklart/
    Ich empfehle dieses Pattern jedem, der sich dazu entscheidet, das Content-Management-System im objektorientiertem Style zu schreiben.

    2.2 Prozedurale Programmierung
    Bei der Prozeduralen Programmierung wird nicht zwischen einem Controller, einer View und einem Model unterschieden, dann sowas gibt es dort nicht! Im Grunde genommen wird dort der Code einfach von oben nach unten geschrieben. Datenbank-Abfragen geschehen sogar noch nach der ersten HTML-Ausgabe.
    Der Vorteil davon ist, dass der Code schneller ist, da er keine Klassen erstellen muss, Abhängigkeiten und Zugehörigkeiten müssen ebenfalls nicht gecheckt werden.
    Der Nachteil: Es ist unübersichtlich! Während bei OOP nur eine Klasse das kann, was sie tun soll, gibt es bei dem sog. "Spaghetti"-Code mehrere Funktionen deren Berechtigungen nicht klar definiert sind.

    3. Design (User Interface)
    Die graphische Oberfläche ist der wichtigste Bestandteil, weshalb dieser auch am meisten Unterpunkte vorweisen kann. Sie ist für den ersten Eindruck zuständig, welchen man niemals vernachlässigen sollte!

    3.1 Animationen - Ja oder nein?
    Ich mach es kurz und knapp: Ja! Animationen sind ein muss! Desto smoother der Übergang zwischen Prozessen, desto besser.
    Aber aufgepasst: Nicht zu viele verschiedene Typen und auch nicht übertreiben! Bei der Erstellung des Layouts sollte man sich im klaren sein, welche Übergange verwendet werden. So zum Beispiel sollte jedes Popup die gleiche Öffnen- & Schließanimation besitzen.
    Doch auch auf die Zeit, die die Animation verwendet, kommt es an. Ein Effekt sollte keine Sekunde in Anspruch nehmen, aber auch keine 0.1s. Man muss also etwas geeignetes finden! Jedoch gibt es noch viele andere Sachen, bei denen ein flüssiger Übergang bestehen sollte: Ladebalken, Asynchrones nachladen von Informationen, Übergange von Seiten (sofern Seite komplett auf Ajax basiert) und vieles mehr!

    3.2 Flat - Ja oder nein? (persönliche Meinung)
    Diese Frage kann man nicht mit einem "Ja" oder einem "Nein" beantworten. Man fragt sich vielleicht, wieso ich nun die Frage so gestellt habe und das hat auch einen einfachen Grund: So lauten oft die Antworten in diesem Forum!
    Ich möchte darauf eingehen, was die Vorteile und Nachteile von Flat/Material Design sind:
    Es ist einfach ein schönes, modernes Design mit Materials zu erstellen. Doch Habbo ist (mehr) modern! Selbst die vielen, sogar meist gut aussehenden Versuche in diesem Forum haben noch Fehler. Ich möchte euch nicht verbieten, ein Flat-Habbo Design zu versuchen, doch die Chance, dass es scheitern und auf schlechtes Feedback trifft, ist groß. Habbo sollte in meinen Augen nicht modern sein und auch kein Material-Design nutzen. Selbst "Kunta" (https://forum.ragezone.com/f331/mvc-self-…cms-4-a-1047953) ist in meinen Augen kein Meisterwerk.
    An dieser Stelle möchte ich mich für diesen Unterpunkt entschuldigen, da ich hierbei nur eine persönliche Meinung abgeben kann. Im großen und ganzen kann ich jedoch sagen (abgesehen vom Konzept der Seite): Flat? JA!

    Schlussendlich möchte ich nochmal erwähnen, dass das meine Ansicht zu den Aspekten ist. Diese Meinung konnte ich mir im Laufe der vergangenen Monate bilden. Ich bitte euch, diese zu respektieren und zu tolerieren. Feedback ist gerne gesehen!

    Mit freundlichen Grüßen
    Ich.

    7 Mal editiert, zuletzt von ragout (29. November 2015 um 18:08)

  • Fang mal langsam an mit der Userclass.

    Ich rede hier von einem Guide, ich programmiere nichts vor.
    Aber wenn du es unbedingt willst:


    Ich habe es nicht getestet!!!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!