Alle Artikel zu #web developing


Neues Spamschutz-System auf Konzertheld.de

Irgendwann im letzten Jahr ging es auf Konzertheld.de plötzlich los mit größeren Spam-Problemen und schnell war klar: So geht das nicht weiter. Ich nutze Habari für meinen Blog (zu dessen Kernprogrammiererteam ich neuerdings übrigens gehöre) und das mitgelieferte Standard-Antispam-Plugin erkennt nur ganz offensichtlichen Spam. Also Kommentare voller Links und wilder Zeichen.

Zwar müssen Kommentare von neuen Kommentatoren wie Peter_SwissWatches erst genehmigt werden, die Seite sieht also von außen sauber aus, aber zwischen den ganzen Fake-Kommentaren versteckte sich eben immer wieder mal einer, den ich freischalten wollte. Dank preapproved wurden immerhin schonmal alle automatisch freigeschaltet, die ich schonmal von Hand freigeschaltet hatte.

Dazu kam dann die von mir aufgemotzte simpleblacklist, die automatisch Kommentator-Mailadressen, -URLs und -IPs aufnimmt, wenn ich einen Kommentar als Spam markiere. Eine weitere Arbeitserleichterung, aber der Kampf gegen den Spam fühlte sich immer noch wie ein Kampf an.

Ein Captcha für alle Besucher war für mich keine Option. Also musste einer her, der intelligent entscheidet, wer den Captcha bekommt. Ein paar werden es in letzter Zeit gemerkt haben: Die Funktion gibt es hier seit einiger Zeit, aber bisher löschte sie das Kommentarformular nach dem Abschicken, wenn der Captcha eingeblendet wurde. Damit ist jetzt Schluss, mit Hilfe der anderen Programmierer habe ich das Problem in den Griff bekommen. Nun wird der Captcha nur Leuten angezeigt, die hier noch nie kommentiert haben (oder die eine neue Mailadresse oder URL haben), alle anderen werden wie gewohnt sofort freigeschaltet.

Der technische Hintergrund: Der modifizierte ReCaptcha prüft mittels eines Validators, ob der Autor des Kommentars schon früher freigeschaltet wurde. Das Ergebnis wird in einer Session-Variable gespeichert. Schlägt die Validierung fehl, wird das Formular zurück gewiesen. Beim erneuten Anzeigen wird anhand der Session-Variable erkannt, dass diesmal der Captcha mit rein soll. Codetechnisch ist das Element des Formulars die ganze Zeit da. Das ist nötig, damit der Formularinhalt erhalten bleibt. Erfolgte die Prüfung aber noch nicht oder wurde der Autor bestätigt, bleibt das Element aber leer, der Besucher sieht also keinen Captcha und bekommt auch das Javascript dafür gar nicht erst ausgeliefert.



Habari Plugin: View all your posts at once

Sometimes it might be useful to view your posts not with a maximum number of X per page but all at once. I made a plugin that adds a rewrite rule you can have a normal multiple view as you would on every normal page, except there is no pagination. Please note that loading might take a long time depending on how many posts you have and how many media is in them. The plugin will use the same output (short, full or whatever you have) as usually.

There is a view for really all published posts and one you can customize by choosing the content types you want in there. Also you can decide whether one of them should not be active. More instructions are available once you installed it (just unpack to your plugins folder).

It's called allposts and it is available on GitHub. You can download the source code with Git or use the zip package for Habari 0.9.



Hinweis auf veralteten Browser für Blogs

Jeder Website-Programmierer weiß, dass es ätzend ist, mit alten Browsern arbeiten zu müssen. Außerdem haben veraltete Browser Sicherheitslücken, die nicht mehr geschlossen werden, weil der Aufwand der Pflege alter Versionen auch für den Herausgeber zu groß ist. Trotzdem verwenden viele Menschen veraltete Browser. Vor allem beim auf Windows vorinstallierten Internet Explorer ist das verbreitet, da dieser trotz Windows-Updates nicht automatisch aktualisiert wird und auch nicht auf Updates hinweist.

Für CMS- und Blogbetreiber gibt es da eine nette Hilfestellung. Auf browser-update.org gibt es ein kleines Javascript, welches einen dezenten und doch unübersehbaren Hinweis einblendet, falls der Besucher der Seite einen veralteten Browser benutzt. Wie genau "veraltet" definiert wird, kann man dabei dem Herausgeber überlassen (dann ist es immer dann soweit, wenn der Herausgeber den Support einstellt) oder selber bestimmen.

Für Habari, die Plattform, auf der Konzertheld.de läuft, habe ich selbst ein passendes Plugin geschrieben. Damit lässt sich das Javascript automatisch einbinden und wahlweise über die Plugin-Konfiguration selbst Browserversionen festlegen. Das Plugin ist öffentlich verfügbar und über Git bearbeitbar auf GitHub unter habari-extras.



Externe Links extern öffnen

Hier im Blog werden, wenn das Theme gerade richtig funktioniert, externe Links anders dargestellt als interne, und bei den internen wiederum die, die zu Posts führen anders als die die zu anderen Inhalten führen. Damit ich nicht immer von Hand die CSS-Klassen angeben und das target-Attribut für externe Links setzen muss, habe ich mir zuerst ein Makro geschrieben (G11 sei Dank), später dann ein PHP-Script was die Datenbank durchforstet. Das war auch deshalb nötig, weil ich keine Lust hatte, von Hand alle alten Posts durchzugehen und die Links zu markieren.

Da ich irgendwie immer noch zu faul bin die Makros zu benutzen oder die Links zu markieren, benutze ich das Script immer noch ab und an. Und mittlerweile habe ich beschlossen, einen CronJob dafür einzurichten. Dann ist's auch nicht schlimm, wenn ich mal vergesse einen Link zu markieren.

Externe Links sollten sich zur Abgrenzung von der Website, von der aus man sie aufruft, in einem neuen Fenster bzw. heutzutage ja eher in einem neuen Tab öffnen. Ich verstehe die Entwickler von Webseiten, bei denen das nicht der Fall ist, nicht. Der Aufwand ist minimal und mir sind keine Probleme bekannt. Es nervt total, wenn man einem externen Link folgt und die Seite auf der man vorher war dann direkt weg ist. Meine Meinung, aber vielleicht teilen einige Leute die ja.

Für den Fall biete ich jedenfalls mein Script zum Download an. Also, für den Fall, dass jemand meine Meinung teilt, auch einen Wordpress-Blog hat und in diesem Links markieren möchte. Man muss oben seine Domain angeben, damit das Script interne URLs erkennt. Danach müssen die Datenbankdaten angegeben werden. Anschließend werden die Posts durchlaufen und per regulären Ausdrücken auf Links überprüft. Die URL wird bei internen Links gestrichen, einige Schreibweisenfehler werden korrigiert. CSS-Klassen werden gesetzt (ggf. anpassen!) und das target-Attribut bei externen Links. Abschließend geht das Ganze zurück in die Datenbank. An verschiedenen Stellen habe ich Kontrollelemente eingebaut, die genutzt werden können, um die Arbeit des Scripts zu überprüfen; das macht natürlich nur Sinn, wenn man das Schreiben in die Datenbank dieweil deaktiviert.

Das Script darf zu nicht-kommerziellen und kommerziellen Zwecken frei benutzt und verändert werden. Daher keine noch so freie Lizenz, sondern ausnahmsweise mal: Macht was ihr wollt! :D (Das bedeutet in der Konsequenz übrigens auch den Ausschluss jeglicher Haftung durch mich. Sichert also im Zweifel eure Datenbank vorher - ich hab auch mal was kaputt gemacht damit, weil n Fehler drin war.)

Falls wirklich jemand die Datei lädt und benutzt, wär's cool, wenn derjenige hier einen Kommentar schreiben würde. Das gilt auch, wenn noch Fehler drin sind. Auch Fragen sind willkommen, alles wie immer halt hahahah

Achtung Update: Das Script produziert in seiner aktuellen Version Fehler, was man daran sieht, dass es den Link zu sich selbst geschrottet hat -.- herunterladen kann man es, wenn man das http:// killt funktioniert natürlich nur intern. Extern fehlt ein konzertheld.de/ zwischen dem http:// und dem wp-content. Ich fixe das dann mal und gebe ein neues Release heraus.

linksmarkieren-anon.php