Blog
tags: news software php mysql deutsch opensource webdesign cbBlog
Permalink: https://musicchris.de/blog?id=74&langopt=english
Es ist vollbracht! cbBlog v0.12 erschienen!
Achtung
Julius hat eine XSS-Schwäche gefunden! Die Version 0.12 sollte nicht unüberlegt eingesetzt werden!
Meine Empfehlung: cbBlog v0.13 ist in Arbeit, und wird vermutlich in den nächsten Tagen erscheinen. Wartet lieber bis dahin, falls ihr tatsächlich überlegen solltet cbBlog einzusetzen.
Nach ein paar rasanten Tagen der Hackerei ist die Version 0.12 so stabil, daß ich denke, es ist an der Zeit ein Release zu taggen.
A simple blog written in php using MySQL for storage.
(c) chris_blues https://musicchris.de
Write blogposts dirctly in HTML guarantees full control over layout and source code
built-in comment function
Licensed under GPL3
Erstmal vielen Dank an die fleißigen Tester, die mir so allerhand Überraschungen bescherten und ungesehene Schwachstellen aufzeigten! Vorneweg Tux, der sich nicht nerven ließ. 😀 Aber auch allen Anderen gebührt mein Dank: Onli, der mir ein paar gute Tips zum Thema MySQL-injections gab; Martin und 0815, dessen Adresse ich leider verbummelt hab...
So, was gibts denn konkret Neues? Ich werd mal versuchen alles aufzulisten.
erhöhte Sicherheit
- durch escapen aller verbliebenen MySQL-queries
- die (hoffentlich) letzten Inline-Styles und Inline-JavaScripte entfernt bzw ausgelagert
bessere Bedienung
- Benachrichtigungen per mail für neue Kommentare (wie vorher schon angekündigt)
- diese Bestätigung wird mittels Double Opt-In registriert (Email-Adresse wird nur als Hash gespeichert, der bei Bestätigung mit der entsprechenden Adresse ausgetauscht wird)
- Ein paar BB-Tags werden unterstützt: [ot], [quote], [b], [i] und [code]
- das Anzeigen bzw Verstecken von offtopic-Inhalten wird besser angezeigt
- etliche kleine und große Fehler wurden behoben
Es gibt auch noch ein paar offene Baustellen; so fehlt noch die Funktionalität, als Admin in den Kommentaren per Mausklick Textpassagen als offtopic zu markieren. Das wäre auch für die Kommentarfunktion interessant!
Trackback steht auch noch auf dem Programm, sowie threaded Kommentare. Aber das wird dann was für das nächste Release.
Zu finden ist der cbBlog wie immer auf gitHub.
comments
1) Julius
22.Jan.2017 03:16
https://web.archive.org/web/20140227111136/http://aktuell.de.selfhtml.org/artikel/php/php-forum/
2) chris_blues
22.Jan.2017 03:25
3) Martin
22.Jan.2017 14:38
4) Martin
22.Jan.2017 14:41
5) chris_blues
22.Jan.2017 14:47
Jetzt bin ich gerade dabei, mal ein paar, wie ich finde, sehr gute Vorschläge von Julius umzusetzen...
6) Matthias
03.Feb.2017 17:56
Ein paar Beispiele:
- Du benutzt mysqli statt PDO und so wie du es benutzt ist nahezu jeder query eine offene SQL-Injection-Kücke (nein, mysqli_real_escape_string() reicht nicht).
- neben "sanitization" (unzureichend, s.o.) fehlt gänzlich die validierung der übertragenen Inhalte.
- du benutzt keinen erkennbaren Architektur-Entwurf (wie z.B. MVC). Daraus resultiert, dass deine Anwendung mehrere Eingangspunkte hat, was auf die Dauer die Komplexität und Fehleranfälligkeit erhöht. Besser wäre z.B. nur eine index.php zu haben hinter der ein router sitzt.
- dein code ist "include-basiert" statt bspw. klassen-basiert oder objekt-orientiert.
- usw..
Hoffe das hilft dir etwas weiter. Nebem dem Buch ist vielleicht auch folgende (kostenlose) Video-Reihe für dich interessant. Da wird grob erklärt, wie man eine eigene MVC-basierte Architektur umsetzt.
https://laracasts.com/series/php-for-beginners
Vieles davon wirst du schon kennen, aber wie du auf deiner "ÜberMich"-Seite schreibst, willst du ja neues kennenlernen. ;)
7) chris_blues
03.Feb.2017 18:32
Vielen Dank schon mal für die Tipps!
MySQL-injections denke ich, hab ich unmöglich gemacht. Was ist denn an mysqli_real_escape_string() unzureichend, bzw, was fehlt denn noch?
Ja, ich hab auch schon drüber nachgedacht die postcomment.php in die blog.php (sowas wie die index.php) zu integrieren. Hatte nur noch keine Zeit, mich da mal ran zu machen.
Ja, bin immer noch den "prozeduralen" Stil gewöhnt. Hab bisher noch keine gut verständliche Lektüre gefunden, um mich da mal anständig rein zu denken. Ich werd mal kucken, was ich so hinter deinen Empfehlungen finden kann. Vllt platzt ja dann der Knoten. ?
Jruß
chris
8) Matthias
05.Feb.2017 20:22
Kann ich voll und ganz nachvollziehen. Also wie gesagt.. die Videoreihe ist sogar kostenlos.. kann ich wärmstens empfehlen. Das Buch hab ich hier auch rumliegen, falls du es sonst nicht findest.
9) chris_blues
05.Feb.2017 22:33
? Wow! Das ist wirklich interessant! Erstaunlich, wie viel schneller man Dinge über Auge und Ohr (Video) aufnimmt, als nur über Text (Buch).
Vielen Dank für diesen großartigen Link. Habe soeben das Konzept mit den Klassen verstanden. Ok, das in die Tat umzusetzen ist nochmal ne andere Nummer, aber immerhin. ?
Ist klassenbasiert nicht dasselbe wie objektorientiert? ?
10) Matthias
07.Feb.2017 10:36
Das war nicht bezogen auf die Art des Programmierens (prozedural, funktional oder objektorientiert) sondern auf die Strukturierung der Anwendung im Sinne von "Klassen für die Strukturierung des Programms nutzen". Grob gesagt ist es am Ende die Art und Weise, wie man das objektorientierte Programmieren anwendet. Da gibt es den klassenbasierten Ansatz und den objektbasierten. Auf Wikipedia gibt es einen ganz guten Artikel dazu, ich bin aber der Meinung, dass das an dieser Stelle zu Weit führt. ;) https://en.wikipedia.org/wiki/Class-based_programming
11) chris_blues
07.Feb.2017 18:53
Ach so war das gemeint. ?
Ja, ich denk mich so langsam rein in die Geschichte...
Im Endeffekt wird das ein Rebuild des Blogs werden, so als Übungsprojekt. Klassenbasiert, mitsamt PDO. Ein paar erste Klassen stehen schon in der Baustelle...
Und PDO ist also sicher gegen SQLi ? Ist ja ein ganz schön umfangreiches Paket.
Die schreiben da, daß eigentlich der Treiber alles maskiert. Was wären da für Sonderfälle denkbar, wo man trotzdem noch SQL injizieren könnte?
12) Matthias
09.Feb.2017 11:59
Also klassische SQL-injection ist mit PDO bzw. mit "prepared statements" nicht mehr möglich. Bei sehr komplexen Projekten hat es aber durchaus noch Angriffe auf die Datenbank gegeben, die man als sql injection bezeichnen könnte (z.B. die s.g. "shoplift"-Lücke bei Magento). Das ist aber auf einem ganz anderen Level als dem, was ohne die Nutzung von prepared statements möglich ist.
Ich würde dir ja empfehlen, dich dann gleich an ein Framework ranzuwagen. Mach den Video-Kurs und dann aufbauend die Laravel from scratch Reihe (auch kostenlos) https://laracasts.com/series/laravel-from-scratch-2017. Damit kannst du dir PDO direkt sparen, weil das Framework eine Datenbank-Abstraktion mitbringt (basierend auf PDO), die das alles viel (viel!) einfacher macht.
13) chris_blues
09.Feb.2017 12:43
Das beruhigt! ☺
Na das muß ich mal sehen. Eigentlich bin ich nicht so'n Fan von fertigen Lösungen. Zumindest ist ja der Blog aus der Idee entstanden; "das will ich selber machen"... Gerade das Refactoring wird schon mal sehr spannend! ? Bin leider noch nicht dazu gekommen konkret zu werden. Irgendwas ist ja immer...
Ja, da hab ich auch schon ein bißchen drüber nachgedacht. Dieses PDO-Prozedere ist ein bißchen umständlich. Wäre doch schön, wenn man sich das irgendwie erleichtern könnte. (Wenn man schon mal dabei ist, sich Dinge zu erleichtern. ? )
14) Matthias
21.Feb.2017 12:10
Es geht auch nicht so sehr um "fertige" Lösungen bei Frameworks, sondern darum zu sehen, wie man Dinge sonst so machen kann (sagen wir auf moderne Art und Weise). In der Videoserie, die ich dir verlinkt habe, wird grob von Hand ein Framework gebaut.
Am Ende ist es gegenüber dem MySQLIi-Kram eher einfacher und aufgeräumter. Mit einem ORM, wie es ein Framework mitbringt ist das aber noch mal einfacher. Wenn man ohnehin schon weiss, wie Datenbanken funktionieren, würde ich mir das mit dem ORM (bei Laravel z.B. "Eloquent") mal anschauen. Du willst danach nicht mehr anders arbeiten, glaubs mir. ;)
15) chris_blues
21.Feb.2017 12:20
Ja, finde ich inzwischen auch nicht mehr so. Richtig hätte es heißen müssen: PDO ist ganz schön anders. Was natürlich einer Lernkurve gleichkommt, die allerdings eher klein ist. Einmal das mit den Klassen und Methoden kapiert, schon wird auch PDO ziemlich einfach. Und vor allem komfortabler. Also ich würde auch jetzt schon nicht mehr anders arbeiten wollen! ?
Auf Github kann man schon einen Next-branch finden, wo der aktuelle Stand des Refactoring zu finden ist. Sieht in meinen Augen schon deutlich aufgeräumter aus der Code. Und gefühlt sinds auch weniger Zeilen, das kann allerdings täuschen, da sich der Code auf mehr Dateien verteilt.
Ok, hast mich überzeugt. ? Ich werd mir bei Gelegenheit mal die Videos zu Laravel und Frameworks ansehen...
16) Matthias
21.Feb.2017 12:35
Interessanter wäre wie gesagt erst mal das generelle PHP-Video, wo man ein Laravel-ähnliches Framework selbst baut.
post a comment
privacy declaration
Your IP-address, useragent-string etc are not stored by this blog-software. Still, it is possible that the hoster of this website may store data like this. But that is beyond the scope of this blog-software. Check out this website's privacy declaration to find out more about that!
This blog-software generally doesn't store any information about you. Only if you post a comment, some data will have to be stored. You don't have to input any personal information here. Except for the comment itself, all fields are optional!
If you don't want to tells us your name, that's fine. It will be shown as 'anonymous'.
If you want to receive notifications on following comments, naturally you'll have to give us your email address. It will be stored and not be shared with anybody. If you don't want to be notified, just leave the notifications field empty.
If you want your name to be linked to your website, you'll have to give us your site's address. Otherwise leave this field empty.
This data will be stored in case you decide to post a comment here: