duckduckgo
Diese Verbindung ist mit SSL verschlüsselt

tags: news software php mysql deutsch opensource webdesign cbNewsletter


04.Nov.2017 23:09 - zuletzt aktualisiert: 05.Nov.2017 02:02

cbNewsletter v1.0-testing veröffentlicht

Seit einer Weile bastele ich immer wieder an einem Newslettersystem für eine Bandwebseite, die ich betreue. So langsam ging mir das Gefrickel fürchterlich auf die Nerven und ich beschloß ein neues System von Grund auf selbst zu bauen. Mit hauptsächlich PHP und SQL und ein kleines bißchen JavaScript.

Vielleicht erinnert sich ja jemand dran, wie ich vor einer Weile anfing mich mit OOP (objekt-orientierte Programmierung) zu beschäftigen. Dies ist ein weiterer Schritt in diese Richtung. Ich habe wieder versucht, soweit es meine Phantasie zuließ, alle möglichen Daten in Objekte zu verpacken. Hin und wieder hab ich es gelassen, da es mir als zuviel des Guten erschien. Jedenfalls ist hier das Ergebnis!

Download

https://github.com/chris-blues/cbNewsletter

Details

Was gibt es dazu noch zu sagen? Ich versuche mal die wichtigsten Punkte zusammenzufassen:

  • Allgemein

    • Übersetzungen mittels gettext() (Quelltext ist englisch, Übersetzung de_DE ist vorhanden)
    • ausführliches Debug- und Fehlerlogging bzw -ausgabe
  • User Schnittstelle

    • Double opt-in Verifizierung der Abonnements (Eintragung sowie Austragung)
    • Abonnementen Selbstmanagement (Name und Emailadresse können vom User geändert werden)
  • Admin Schnittstelle

    • Suchfunktion in den Abonnementen mittels SQL-REGEX
    • Vorlagenfunktion
  • Datenbank

    • alle DBzugriffe über PDO, nebst PHP filter_validate / filter_sanitize
    • Datenbanktabellen werden automatisch erstellt
    • alle Datenbanktabellen werden nach 14 Tagen automatisch gewartet (optimize)
    • nach 30 Tagen werden nicht verifizierte Abonnements automatisch entfernt

TuDu

Was noch auf der Wunschliste steht, aber bis hier hin nicht sehr weit oben auf meiner Prioritätenliste stand, sind folgende Punkte:

  • Das Adminverzeichnis serverseitig schützen. Also sowas wie .htpasswd . Habe aber noch keine Ideen, wie man das kompatibel zu anderen Servern als Apache machen kann. Sollte aber eigentlich jeder Admin selbst hinbekommen. Status: wäre nett, dabei zu sein
  • HTML mails. Kann ich persönlich nicht so richtig leiden. Wird aber gewünscht, also wird das auch kommen. Muß ich mich aber noch ordentlich belesen... Status: kommt noch
  • Im Zusammenhang mit HTML mails: ein vernünftiger Editor. Wird wohl hauptsächlich JavaScript sein. Empfehlung war in der Vergangenheit: ckEditor. Muß ich mal noch weiter lesen... Status: kommt Zeit kommt Editor...

Das Wort zum Sonntag

Mehr fällt mir im Moment nicht ein. Bei Fragen einfach unten die Kommentarfunktion benutzen! Über Tester, Feedback und Kritik zum cbNewsletter würde ich mich riesig freuen. Ich bin mir ziemlich sicher, daß die Betriebserblindung schon längst zugeschlagen hat! 😀

Ansonsten noch ein schönes Wochenende euch allen!

Zitat Abstürzende Brieftauben:

Und haben wir nicht auf Sand gebaut
so haben wir's doch auf Band gesaut!

...in diesem Sinne...

Jruß,
chris

Creative Commons Lizenzvertrag
Dieses Werk ist lizenziert unter einer
Creative Commons Namensnennung 4.0 International Lizenz .

Kommentare

1) Matthias

05.Nov.2017 14:14

Moin,

gratuliere zum Release. Schön zu sehen, dass du noch eifrig dabei bist! Ich hab (wie immer :-)) ein paar Hinweise für dich.

Zum Lernen ist es auf jeden Fall super alles mal selbst zu basteln. Ich hatte dir dazu ja auch mal ne Video-Reihe empfohlen, wo man das Schritt für Schritt tut. In konkreten Projekten würde ich Dinge wie Routing dann aber doch eher einer Bibliothek überlassen, wo das ordentlich gelöst (und einfach zu benutzen) ist. Dazu würde ich dann direkt empfehlen composer für das autoloading der Klassen zu benutzen. Damit sparst du dir die ganzen include/require statements und PHP kümmert sich automatisch drum, dass auch nur Klassen geladen werden, die auch gerade gebraucht werden.

Wenn ich so grob durch den Code schaue, fallen mir da einige recht schwere Sicherheitslücken auf (aka "Dinge die jeder beim ersten mal falsch macht"). Als ein Beispiel nehme ich direkt das "routing":
https://github.com/chris-blues/cbNewsletter/blob/master/admin/lib/routing.php#L62-L68

Das ist ein Teil einer mehrteiligen Sicherheitslücke. Als Angreifer kann ich hier über den GET Parameter "view" nahazu beliebig festlegen, was für eine Datei geladen wird. Also nicht "du" legst fest, was geladen wird, sondern der Besucher kann eine "beliebig.action.php" laden. Das ist eine s.g. File inclusion vulnerability. Nun muss der Angreifer nur noch eine zweite Lücke finden, mit der er Dateien auf den Server schreiben kann und hat damit nicht nur beliebigen Code ausführen, sondern auch beliebig Dateien auf dem Server auslesen. So was findet man fertig im Netz.

Also noch mal mein Tipp, schau die mal das hier an (ist kostenlos). Die ersten Lessons werden nix neues sein, am Ende kommt aber ein komplett selbstgebautes Framework raus, es wird erklärt, wie man einen ordentlichen router baut und wie man auf composer autoloading umstellt. Das kannst du alles direkt bei deinem Projekt hier anwenden. Viel Erfolg. ;)

2) chris_blues

05.Nov.2017 15:37

Hi Matthias!

Jo, das dachte ich mir gestern, als ich im Bettchen lag auch; ich werd mir mal nochmal diese Videos anschauen, und mal gegenprüfen, was da so anders gemacht wird.

Autsch, eine file inclusion vulnerability klingt ja /&§"$"(! Da muß ich wohl nochmal ran. Aber erstmal in Ruhe sehen, ob ich diese Laracastserie zum laufen überreden kann. Die zickt irgendwie rum... Naja, vimeo zickt rum. wget, mein Freund und Helfer! 😎

Na denn danke für den Hinweis und nen schönen Sonntag noch! ☮

Update:
Ok, ich habs gefixt! Vielen Dank nochmal für den Hinweis!

Für Hinweise zu den weiteren Sicherheitslücken wär ich nach wie vor sehr dankbar! ☺

3) Matthias

06.Nov.2017 10:02

Tiptop. ;) Ich schau am WE noch mal in Ruhe rüber und guck nach den anderen Problemen.
Name: (optional)

leer lassen

Benachrichtigen: (optional, um zu neuen Kommentaren benachrichtigt zu werden)

Website: (optional)

Ihr Kommentar
😀😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😑😒😓😔😕😖😗😘😙😚😛😜😝😞😟😠😡😢😣😤😥😦😧😨😩😪😫😬😭😮😯😰😱😲😳😴😵😶😷🙁🙂🙃🙄🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🤐🤑🤒🤓🤔🤕🤖🤗🤘🤠🤡🤢🤣🤤🤥🤦🤧𝄞🌍🌹🍻🍾