duckduckgo
Diese Verbindung ist mit SSL verschlüsselt

tags: news software php mysql deutsch opensource webdesign cbBlog


21.Jan.2017 23:38 - zuletzt aktualisiert: 22.Feb.2017 10:49

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.

beispielhafte Kommentarspalte, die alle BB-Tags verdeutlichen soll

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.

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

Kommentare

1) Julius

22.Jan.2017 03:16

Für threaded-Kommentare vielleicht ganz interessant (der Code ist natürlich Asbach-uralt):
https://web.archive.org/web/20140227111136/http://aktuell.de.selfhtml.org/artikel/php/php-forum/

2) chris_blues

22.Jan.2017 03:25

Danke für den Link! Habs grad mal überflogen. Das muß ich mir mal in Ruhe zu Gemüte führen... 😃

3) Martin

22.Jan.2017 14:38

Kein Problem. Gleich mal testen ob jetzt alles funktioniert, wie es soll.

4) Martin

22.Jan.2017 14:41

Alles gut: Kein error, E-Mail kommt an und der Link funktioniert.

5) chris_blues

22.Jan.2017 14:47

Na super! Das freut mich zu hören/lesen! 😁

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

Hey, ein schönes Projekt hast du da. Wenn ich so über den Code schaue, würde ich dir aber gerne ein Buch empfehlen: "Modernizing Legacy PHP Applications" von Paul Jones. Das Buch zeigt ganz gut Fehler auf, die man machen kann (welche man später bereut) und wie man sie ohne kompletten rewrite behebt.

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

Hallo Matthias!

Vielen Dank schon mal für die Tipps!

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).

MySQL-injections denke ich, hab ich unmöglich gemacht. Was ist denn an mysqli_real_escape_string() unzureichend, bzw, was fehlt denn noch?

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.

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.

dein code ist "include-basiert" statt bspw. klassen-basiert oder objekt-orientiert.

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

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.


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

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. ;)

😎 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. 😉

dein code ist "include-basiert" statt bspw. klassen-basiert oder objekt-orientiert.

Ist klassenbasiert nicht dasselbe wie objektorientiert? 🤓

10) Matthias

07.Feb.2017 10:36

Ist klassenbasiert nicht dasselbe wie objektorientiert?


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

Grob gesagt ist es am Ende die Art und Weise, wie man das objektorientierte Programmieren anwendet.

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

Und PDO ist also sicher

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.

Rebuild des Blogs

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

Also klassische SQL-injection ist mit PDO bzw. mit "prepared statements" nicht mehr möglich.

Das beruhigt! ☺

Ich würde dir ja empfehlen, dich dann gleich an ein Framework ranzuwagen.

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...

Damit kannst du dir PDO direkt sparen, weil das Framework eine Datenbank-Abstraktion mitbringt (basierend auf PDO), die das alles viel (viel!) einfacher macht.

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

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...


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.

Dieses PDO-Prozedere ist ein bißchen umständlich.

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

Dieses PDO-Prozedere ist ein bißchen umständlich.

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.

Du willst danach nicht mehr anders arbeiten, glaubs mir. ;)

Ok, hast mich überzeugt. 😎 Ich werd mir bei Gelegenheit mal die Videos zu Laravel und Frameworks ansehen...

16) Matthias

21.Feb.2017 12:35

Ich werd mir bei Gelegenheit mal die Videos zu Laravel und Frameworks ansehen


Interessanter wäre wie gesagt erst mal das generelle PHP-Video, wo man ein Laravel-ähnliches Framework selbst baut.
Name: (optional)

leer lassen

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

Website: (optional)

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