[Clan System]SimpleClanSystem

    • Beta
    • Open Source

    Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von N3X.

      [Clan System]SimpleClanSystem

      Name:
      SimpleClanSystem (SCS)

      Beschreibung:
      Vor einiger zeit habe ich für meinen Clan bei Space Engineers ein clan system erstellt.
      Und ich habe mir nun überlegt, dieses hier im Forum zu veröffentlichen.

      Dieses bietet viele nützliche funktionen. Wie etwa:
      - Member System/Registration/Freischaltung...
      - Rechte vergabe (Admins, Supporter...)
      - Chat
      - Message System
      - Gallerie
      - Diskussionen
      - Alles durch Admins und Supporter veränderbar (Inhaltlich)
      - News
      - Warnungen/Infos

      Wie die Installation abläuft, steht in der README!!!.txt ...

      Meine ClanWebsite: http.//www.stargate-engineers.tk

      Screenshot(s):
      Sind im Anhang

      Systemanforderungen:
      - Internet Browser
      - Javascript aktiviert

      Anforderungen an den downloader:
      - Du musst ein bisschen Ahnung von PHPMyAdmin haben (DB Struktur hochladen)

      Anforderungen an den Webserver:
      - PHP
      - MySQL

      Download:
      Im Anhang
      Achtung! Bei der Installation wird der Domainname des Webservers der das Script ausführt in einer fremden (meiner) Datenbank gespeichert!

      Lizenz/Weitergabe:
      OpenSource (Weitergabe nur über diesen Thread)
      (Leider ist bei einigen Dateien die Leserlichkeit abhanden gekommen...)


      Readme.txt (Installation):

      Spoiler anzeigen
      Danke für den Download meines Clan Website Systems.
      Bevor du starten kannst, musst du noch 3 Schritte vornehmen!

      1. Öffne die settings.php und andere die jeweiligen Werte. (Ich denke das ist selbsterklärend ;) )

      2. Öffne PHPMyAdmin (oder was du zur MySQL interaktion nutzt) und importiere die Datenbankstruktur (db-struktur.sql)

      3. Lade die Datei setowner.php hoch, und rufe die URL dieser auf. Folge dort nun den Anweisungen um dir den owner Account zu erstellen.

      Wenn du alle dateien hochgeladen hast, und die 3 Schritte befolgt hast, sollte dein System nun fertig sein.
      Du kannst dich mit dem Owner Account einloggen.

      Achtung! :

      Bitte versuche keine Änderungen an der Website durchzuführen wenn du kein PHP, MySQL oder HTML kannst.
      Lediglich die style.css kannst du leicht abändern und natürlich Bilder ersetzen, um das Design zu ändern. :)

      Bei Fehlern bitte im Forumthread melden Danke! :-)



      (Es mag sein das der Code nicht klasse ist, jedoch hatte ich nie wirklich Unterricht darin,
      sondern habe mir das alles selber im Internet beigebracht, ausserdem war dies nur ein kleines Freizeitprojekt...)
      Bilder
      • 01.jpg

        1,09 MB, 1.920×1.080, 345 mal angesehen
      • 02.jpg

        376,97 kB, 1.920×1.080, 287 mal angesehen
      • 03.jpg

        322,07 kB, 1.920×1.080, 243 mal angesehen
      • 04.jpg

        393,24 kB, 1.920×1.080, 253 mal angesehen
      • 05.jpg

        276,95 kB, 1.920×1.080, 235 mal angesehen
      • 06.jpg

        283,22 kB, 1.920×1.080, 224 mal angesehen
      • 07.jpg

        308,88 kB, 1.920×1.080, 231 mal angesehen
      • 08.jpg

        353,57 kB, 1.920×1.080, 222 mal angesehen
      • 09.jpg

        343,63 kB, 1.920×1.080, 184 mal angesehen
      • 10.jpg

        308,67 kB, 1.920×1.080, 205 mal angesehen
      • 11.jpg

        324,22 kB, 1.920×1.080, 201 mal angesehen
      • 12.jpg

        257,66 kB, 1.920×1.080, 177 mal angesehen
      • 13.jpg

        289,22 kB, 1.920×1.080, 179 mal angesehen
      • 14.jpg

        322,17 kB, 1.920×1.080, 238 mal angesehen
      Dateien
      • ClanSystem.zip

        (396,28 kB, 145 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Marcel1997“ ()

      ziemlich schlimmer coding stil...
      und vulnerable insbesondere auch noch, gerade was XSS-Angriffe betrifft :).

      Quellcode

      1. include "settings.php"; $db = new mysqli($dbserver, $dbuser, $dbpass, $db);
      2. $command = "INSERT INTO `members` (`username`, `password`, `email`, `rank`, `srank`, `rights`, `active`) VALUES ('".$db->real_escape_string($_POST["username"])."', '".$db->real_escape_string($_POST["password"])."', '".$db->real_escape_string($_POST["email"])."', 'president', 'President', '*', true)";
      3. $result = $db->query($command);


      Ganz davon abgesehenn, dass ich sowas hier absolut nicht nett finde ;)

      Quellcode

      1. file_get_contents("http://www.stargate-engineers.tk/newclan.php?web=".$_SERVER['SERVER_NAME']);


      Was ich auch spannend finde ist, du filterst nirgendwo überhaupt auch nur einen hauch von XSS.
      Ich kann mir sogar ein Alert als nicknamen verpassen, bei der Registration wie z.B.

      Quellcode

      1. <script>alert(1)</script>


      Oder ich haue mir einen entsprechenden Snippet rein um einzelnen Administratoren die Cookies zu klauen, und sich mit den jeweiligen Sessions dann einzuloggen.

      Zusätzlich dazu sollten Loginfelder ebenfalls von der Zeichenlänge begrenzt werden (wie auch andere Felder wegen DoS z.B. RUDY) und Passwörter nicht im Plaintext in der Datenbank hinterlegt werden.
      Was ich dazu noch recht spannend finde sind deine Varchar-Felder in der Datenbank mit einer Länge von 3000 Zeichen.
      slideshare.net/techdude/how-to-kill-mysql-performance


      Dann bzgl. der Spalte "online", würde ich nicht anhand einer Spalte ausmachen ob der Benutzer gerade eingeloggt ist, denn spätestens wenn der Benutzer die
      Seite verlässt ohne sich auszuloggen ist er daueronline.
      Dein Datenbankschema ist auch extrem auf Redundanz und Anomalien gebaut und nicht normalisiert.

      Der Versuch Fehler und unsaubere Programmierung durch das setzen von error_reporting auf null ist auch kein sonderlich eleganter Weg.
      Genauso wie dein Tasks Ordner für jeden zugänglich ist, und sich spätestens in der File "sidebar.php" eine path disclosure finden lässt.

      Dann um zurück zum Thema Coding-stil zu kommen, ist das ein ziemlich großer haufen spaghetti code und solche Punkte wie:

      Quellcode

      1. if($o == "ok")
      2. {
      3. echo "<font color='#81F781'>Success, you can login, as soon as you are activated by one of our ministers :)</font>";
      4. }
      5. elseif($o == "pf")
      6. {
      7. echo "<font color='#FA5858'>The passwords do not match!</font>";
      8. }
      9. elseif($o == "ex")
      10. {
      11. echo "<font color='#FA5858'>The user exist already!</font>";
      12. }


      sind nicht sonderlich performant. Bessere Möglichkeit:
      php.net/manual/de/control-structures.switch.php

      Ich möchte dir damit nicht gegen das Bein treten, nehm es als Kritik auf, und versuch es bestmöglich zu optimieren.
      So wie das ganze aktuell steht ganz davon abgesehen, dass es viele andere tolle kostenfreie Software gibt,
      kann ich jedem von der produktiven Nutzung deines Scripts nur abraten, ganz klarer Punkt und so ziemlich der wichtigste ist,
      dass dein Script eher einen Honeypot darstellt als etwas tatsächlich nützliches.

      Kann dir daher echt nur ans Herz legen, das ordentlich durchzuschrubben und aufzuräumen, bevor du das mit anderen ernsthaft teilen möchtest.
      Bilder
      • xss1.png

        284,57 kB, 1.211×685, 309 mal angesehen

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Umbekannt“ ()

      Hallo,
      erstmal vielen dank für deine konstruktive Kritik,
      Wie ich im Start post bereits erwähnt habe, ist dies ein kleines älteres Projekt was ich in sehr kurzer Zeit
      eher zweckmäßig erstellt habe. Ich hatte mir schon vorgenommen alles nochmal zu überarbeiten, jedoch
      habe ich grade wenig Zeit dazu. Außerdem hast du dir wahrscheinlich nicht alles angeschaut, denn z.B.
      das online System loggt jeden User automatisch nach 10 min aus, wenn dieser die Seite ohne Logout verlässt.

      Besonderen Dank an die XSS versuche die du an meiner Seite durchgeführt hast ;) :D
      Leider konnte ich mir die schönen Alert's nicht anschauen, weil ich die vorher schon gelöscht hatte :D

      Und zu der Clanliste, dies soll lediglich dazu dienen, mir zu zeigen wer sich das System runterlädt und installiert :D

      EDIT: zum Code style, ja ich weis das das recht ähhhmm "unübersichtlich" ist...
      Und außerdem kann man das System durchaus benutzen und es bietet auch viele nützliche Funktionen wie ich finde...
      OpenSource heißt ich kann den Code direkt irgendwo einsehen bzw das Projekt laden, aber ich sehe hiervon nichts.
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Ah, danke, hab ich nicht gesehen.
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

      Marcel1997 schrieb:

      Hallo,
      erstmal vielen dank für deine konstruktive Kritik,
      Wie ich im Start post bereits erwähnt habe, ist dies ein kleines älteres Projekt was ich in sehr kurzer Zeit
      eher zweckmäßig erstellt habe. Ich hatte mir schon vorgenommen alles nochmal zu überarbeiten, jedoch
      habe ich grade wenig Zeit dazu.


      Mag sein,
      aber
      dann würde ich das auch nicht zum Download anbieten, wenn die Software
      einfach nur fahrlässig programmiert wurde. Denn letztendes ist es das.

      Marcel1997 schrieb:


      Außerdem hast du dir wahrscheinlich nicht alles angeschaut, denn z.B.
      das online System loggt jeden User automatisch nach 10 min aus, wenn dieser die Seite ohne Logout verlässt.

      Stimmt,
      ich habe mir die "CMS" nicht genauer angesehen. Allerdings in dem Sinne
      so "automatisch" loggt dein System einen User nicht aus, es Bedarf nach
      wie vor einen Request der Webseite, wenn es denn so ist. Es ist kein
      sauberer Weg. Ein gutes Beispiel, wie es in einigen CMS's vorzufinden
      ist, werden die Sessions in einer weiteren Tabelle hinterlegt
      (Memory-Tabelle). Tatsächlich "autom." würde es erfolgen, wenn ein
      entsprechender cronjob gerade in deinem Falle prüfen würde, ob der user
      denn tatsächlich noch eingeloggt ist. Wobei ich auch hier keinen
      Anhaltspunkt in deinem Datenbankschema sehe. Den letzten Zeitpunkt vom
      Login dafür zu nehmen, und daraus den Endschluss zu ziehen "ja hier der
      user ist niemals länger als 10 minuten auf der seite", würde ich auch
      nicht diese Annahme weit hoch setzen.

      Marcel1997 schrieb:


      Und zu der Clanliste, dies soll lediglich dazu dienen, mir zu zeigen wer sich das System runterlädt und installiert


      Auch
      hier ohne eine entsprechende Einwilligung eines (End-)benutzers sehe
      ich ein Problem bei den getzlichen Datenschutzbestimmungen, da du Daten
      einholst, ohne ein entsprechendes Recht dazu erhalten zu haben.

      dejure.org/gesetze/BDSG/4.html

      Der
      Artikel richtet sich auf personenbezogene Daten. Warum ich diesbzgl.
      eine Domain als personenbezogene Daten sehe? -> Contact-Handler.

      Wäre ich ernsthaft sehr vorsichtig..

      Marcel1997 schrieb:


      EDIT: zum Code style, ja ich weis das das recht ähhhmm "unübersichtlich" ist...
      Und außerdem kann man das System durchaus benutzen und es bietet auch viele nützliche Funktionen wie ich finde...


      de.wikipedia.org/wiki/Normalisierung_(Datenbank)
      php-coding-standard.de/mhtml/

      tut
      mir leid, aber dass es hier um nur "unübersichtlichkeit" geht ist
      bullshit. Ich bin was das Thema betrifft sehr pingelig. Also unter
      "unübersichtlichkeit" verstehe ich falsches Einrücken, oder ähnliches.
      Aber ganz im ernst, sicher nicht eine wesentliche fahrlässigkeit und fehlende Kontrollroutinen.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „N3X“ ()

      Deshalb ist mein Projekt ja open Source. Damit Leute wie du Fehler und Sicherheitslücken finde, und man die ausbessern kann.

      Und zu diesem:

      N3X schrieb:

      Den letzten Zeitpunkt vom
      Login dafür zu nehmen, und daraus den Endschluss zu ziehen "ja hier der
      user ist niemals länger als 10 minuten auf der seite", würde ich auch
      nicht diese Annahme weit hoch setzen.

      Der User könnte 24 Std. auf ein und der selben seit sein, ohne neuzuladen. Und ohne das er abgemeldet wird, weil ein
      Iframe mit dazugehörigem Script alle 9.30 min die letzte Aktivität (Zeitstempel) wieder aktualisiert :D
      Außerdem habe ich auf Sachen wie Cronjobs verzichtet um die Serverauslastung niedrig zu halten. Weil wieso alle 10 min einen Cronjob laufen lasse, wenn jeder User beim
      öffnen einer Seite selbst diesen Job übernehmen kann.

      Zu der Sache mit dem Datenschutz, ich hab nun in den Start post eine dicke Warnung eingebaut...

      weiterhin vielen dank :)


      EDIT: Und ja, wir wollen uns nicht länger an diesen Kleinigkeiten aufhalten, ich will versuchen die Sicherheitslücken zu stopfen usw.

      Marcel1997 schrieb:

      Deshalb ist mein Projekt ja open Source. Damit Leute wie du Fehler und Sicherheitslücken finde, und man die ausbessern kann.


      Recherchiere doch bitte einmal nach der Bedeutung von Opensource. Insbesondere heißt opensource nicht : "andere schreiben die software für mich".

      Marcel1997 schrieb:


      Der User könnte 24 Std. auf ein und der selben seit sein, ohne neuzuladen. Und ohne das er abgemeldet wird, weil ein Iframe mit dazugehörigem Script alle 9.30 min die letzte Aktivität (Zeitstempel) wieder aktualisiert


      Nette Idee, aber auch da habe ich den Eindruck, dass dich die performanceoptimierte Programmierung kein Stück juckt. Nehmen wir ein Beispiel-Szenario:

      Dein Clan-Portal ist super populär, du hast täglich 50 durchschnittliche Besucher pro Sekunde, über den Tag verteilt, sind einige "daueronline", z.B. weil sie ihren Rechner nicht herunterfahren.
      Welche Folge hätte das für den Webserver? Ein gewollter Destributed Denial of Service ist schon eine sehr spaßige Sache. :thumbup:

      Marcel1997 schrieb:


      Außerdem habe ich auf Sachen wie Cronjobs verzichtet um die Serverauslastung niedrig zu halten. Weil wieso alle 10 min einen Cronjob laufen lasse, wenn jeder User beim
      öffnen einer Seite selbst diesen Job übernehmen kann.


      Danke, dass du beherzt meine Tipps die ich dir dazu gebe, ignorierst (Session-Tabelle -> Timestamp -> MEMORY-Table und etc.). Die einfachste Lösung wäre eine Software vernünftig zu schreiben, so wie es z.B. von einem Fachinformatiker für Anwendungsentwicklung erwartet wird (Zukunftsorientiert, Wartbarkeit, Modifizierbarkeit, Performance und etc.).

      de.wikipedia.org/wiki/FURPS

      Ich war der Meinung schon möglichst direkt gewesen zu sein, als ich sagte, dass ein Pflaster für etwas keine Lösung ist (-> Bullshit).
      Spätestens, wenn du deine Datenbank vernünftig modeliert hättest, wäre dir aufgefallen, dass es durch aus sehr wohl gute Lösungen gibt sowas abzubilden. Tipp dazu: Schau dir bestehende Systeme an.

      und nochmal der sicherheitshalber wieder ein kleines Beispiel :) blog.thomasv.nl/2013/01/cakeph…sessions-in-the-database/

      php.net/manual/en/class.sessionhandler.php

      Das sind so die grundlegenden Punkte, ich könnte noch was zu den Weiterleitungen für den Login bzgl. des Javascripts sagen, aber ich denke den Rest dazu kann man sich denken... Scriptblocker sind tolle Sachen.

      Letztenendlich, sehe ich das größte Problem neben den Sicherheitslücken an dem Datenbankschema, ich denke, bei einer geringfügigen Anzahl an Usern wird es 1. nach weniger Zeit zu Annomalien kommen und und Redudanz erwartet das Tabellenschema sowieso, nichts entspricht auch nur irgend einer Normalform / Standard. Aber das sagte ich ja bereits in meinem Post mit der Verlinkung zu "Howto kill mysql performance".

      Es gibt mhh.. ich drücke mich vorsichtig aus "einen enormen" Optimierungsbedarf.

      de.wikipedia.org/wiki/ISO_9126

      und nochmal am Rande (natürlich unauffällig):
      tinohempel.de/info/info/datenbank/normalisierung.htm

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „N3X“ ()