Strict Standards: Declaration of bBlog::display() should be compatible with that of Smarty::display() in /home/jan/public_html/relovution/bblog/inc/bBlog.class.php on line 1034
relovution.de

» die relovution kommzt... sei auf der hütte!

August 3, 2006

» Realtime Blackholing

Nachdem ich heute die raffinierteste Spam Mail meines ganzen Lebens bekam..

Subject: Ralph
From: Summit <summit bei wh-networks.com>
Date: 03:41
To: Zakharov <zakharov bei xetronet.de>

Use password to open archive.
(Bild mit Zahl, im Anhang Isabell.zip)

..habe ich mich endlich durchgerungen wenigstens absolute basics der Spamprävention in mein E-Mail System einzubauen. Basics nur deshalb, weil ich ziemlich paranoid gegenüber “false positives” bin, also als Spam erkannte, aber eigentlich legitime Mail. Das Ganze war kein großer act, ein paar kurze Zeilen in /etc/postfix/main.cf ..

# RBL
default_rbl_reply = $rbl_code RBLTRAP: Please go away.
smtpd_helo_required = yes
smtpd_delay_reject = yes

und einfügen von reject_rbl_client sbl-xbl.spamhaus.org in smtpd_recipient_restrictions

..und schon hat man eine kleine, nette Blacklist, die bekannte und notorische Spamserver blockt. Keine 5 Sekunden nach dem neustarten von Postfix wurden prompt zwei Spammails abgelehnt..

Geek Gefaselreagieren, kommentieren! (das hat noch niemand zuvor)(20:30 Uhr)

March 1, 2006

» bBlog Hacking: Nachtrag

Hatte noch einen kleinen Bug im Userdaten-per-Cookie-merken-Hack - ich Trödel hatte vergessen beide setcookie() Aufrufe anzupassen. Ist im unteren Post und im eigentlichen Code hier nun verbessert ;) Jetzt sollte auch alles so funktionieren, wie es soll.

Jaja, traue nie einer 1.0 ;)

Geek Gefaselreagieren, kommentieren! (das hat noch niemand zuvor)(17:21 Uhr)

February 28, 2006

» MySQL Upgrade

Ich liebe Ferien, da kommt man endlich mal zu lange fälligen Serverwartungsaufgaben. So z.B. das lange vor mir her geschobene Datenbankupgrade von MySQL 4.0 auf 4.1, aber heute wurde auch dies bewältigt. Jetzt fehlt nur noch die Umstellung auf GCC 3.4, eine deutlich heiklere Geschichte.. aber das wird schon :)

Jedenfalls gab und gibt es daher die Tage vielleicht ab und zu mal Aussetzer im ansonsten natürlich ausgezeichnet Störungsfreien Serverbetrieb. :)

Geek Gefasel · Laberreagieren, kommentieren! (erst einer war schon schneller)(21:09 Uhr)

» bBlog Hacking #2

Comment Spam bei bBlog.. so häufig wie Flöhe auf Hunden anzutreffen. Aber was tut man dagegen?

Es gibt zwei Haupteinfallstore von Comment-Spam in bBlog: Zum einen (der überwiegende Großteil) über die Trackback-Funktion. Die ist zwar eigentlich sehr nützlich, es wäre daher auch schade sie komplett zu deaktivieren/löschen, wird aber leider oft zum spammen mißbraucht. Nicht länger, dank der (nicht)patentierten Trackback.php-umbenenn-spam-problem-lös-o-matic-3000 Methode! :)

Der Trick ist ganz simpel: Die Spambots versuchen den Trackbackmechanismus über das ihnen eingetrichterte URL-Schema http://dein-blog.de/bblog/trackback.php zu erreichen. Wird diese trackback.php jetzt umbenannt, läuft ihre Attacke ins leere, während 'echte' Menschen auf der Seite die richtige Trackback-Addresse überall einsehen können. Das ganze ist natürlich keine gute, dauerhafte Lösung, aber doch angenehm wirkungsvoll ;) (..und sie geht übrigens auf Hijacker zurück. Jedenfalls behauptet er das :P)

Zur Freude aller sind die Änderungen diesmal wirklich sehr einfach. Man muss im bblog/ Unterverzeichnis nur 3 Dateien heraussuchen und in Ihnen insgesamt 4 Stellen ändern: Überall wo "trackback.php" im Quelltext auftaucht, muss es umbenannt werden in z.B. "trackback-nobot.php" (Der Name ist egal, es muss nur .php am Ende stehen). Die zu ändernden Dateien sind bblog/bBlog_plugins/builtin.archives.php (1 mal), bblog/bBlog_plugins/builtin.post.php (1 mal) und bblog/inc/bBlog.class.php (2 mal).

Zu guter letzt muss natürlich noch die Datei trackback.php (im bblog/ Unterverzeichnis deiner bBlog-Installation zu dem obig gewählten Namen umbenannt werden - und Voila! Fertig ist das ganze.


Bleibt noch das andere Dingelchen, "normaler" Comment-Spam. Hier gibt es verschiedene Lösungsansätze; üblich sind heutzutage die sogenannten "Captchas". Ihr Prinzip: Jemand, der einen Kommentar machen will, muss ein paar Buchstaben in ein zusätzliches Feld eingeben, die für einen Computer sehr schwer erkennbar, für einen Menschen aber problemlos lesbar sind. Ich setze hier auf eine stark abgespeckte (sprich schwach schützende) Lösung: Statt des üblichen, stark verzerrten (und daher für Computer aufgrund ihren eklatanten Schwächen im Mustererkennungsbereich, in dem Menschen aber wiederrum glänzen, schwer erkennbaren) Bildes mit der "Lösung" reicht mir ein einfaches, kleines Wort. Prinzipiell ist das für Spammer keine große Hürde, aber es müsste sich eben tatsächlich der Spammer hinsetzen und seine Software extra für dein Blog anpassen. Was relativ selten geschehen wird.

Los gehts: Öffne in deinem Lieblingseditor die Datei bblog/inc/bBlog.class.php deiner bBlog-Installation und springe zu Zeile 883 (bei einer unberührten bBlog 0.7.6 Installation). Dort sollte stehen:
elseif($post->allowcomments == ('disallow') or
          ($post->allowcomments == 'timed' and $post->autodisabledate
          < time() ))
    {
        $this->standalone_message("Error adding comment",
          "Comments have been turned off for this post");
    }
Genau hintendran (und damit vor das folgende else {) musst du folgendes einfügen:
elseif($_POST['magic_key'] != "dein Zauberwort")
    {
        $this->standalone_message("Wollen Sie mich verarschen,
          Mr. Superspam?");
    }
Was noch geändert werden könnte, ist offensichtlich: Statt "dein Zauberwort" schreibst du... naja, dein gewünschtes Zauberwort halt, rein. Und der eher umgangssprachliche Teil kann natürlich ebenfalls durch eine 'schönere' Fehlermeldung ersetzt werden. Wenn man das denn möchte.

Damit beim schreiben eines Kommentars überhaupt das Zauberwort an bBlog durchgereicht werden kann, müssen wir auch noch die post.html deines benutzten Templates anpassen:
<input name="magic_key" type="text" id="magic_key" />
muss dahin, wo dann später die Box stehen soll, in der man das Zauberwort eingeben soll. Natürlich wäre es recht hilfreich, einen mehr oder minder kleinen Text dazuzuschreiben, in dem erklärt wird, welches Wort man da reinschreiben muss.. :)

Ja, das wars soweit erstmal mit meinen bBlog Modifikationen, Teil 2. Ich hoffe ich konnte euch ein bisschen im Kampf gegen den Spam helfen :)

Geek Gefaselreagieren, kommentieren! (5 haben schon reagiert)(19:05 Uhr)

» bBlog Hacking

So, abgesehn vom mini-Captcha habe ich jetzt noch was in mein hübsches bBlog eingebaut, und zwar etwas furchtbar praktisches: Mein Blog kann sich jetzt auf Wunsch merken, wer du bist! :)

Wer das ganze auch haben will, der geht nach folgender Anleitung vor. Wenn man allerdings wenig bis keinen Plan von der Technik hinter bBlog hat, für den wirds vielleicht schwierig, ein gewisses Verständnis wird hier eigentlich vorausgesetzt.. bei Unklarheiten kann man aber natürlich rückfragen. Los gehts:

Die Änderungen sind recht simpel: in der bblog/inc/bBlog.class.php muss in der Funktion "function display($page,$addfooter=true) {" nach ob_start(); folgender Code eingefügt werden (bei bBlog Version 0.7.6 müsste das Zeile 540 sein):
if ($page == "post.html") {
  if (!empty($_COOKIE['bblog_userdata'])) {
    $userdata = explode(";", $_COOKIE['bblog_userdata']);
    $this->assign("nickname", $userdata[0]);
    $this->assign("email", $userdata[1]);
    $this->assign("publish_email", ($userdata[2] == "1") ?
        "checked=\"checked\"" : "");
    $this->assign("homepage", $userdata[3]);
    $this->assign("publish_homepage", ($userdata[4] == "1") ?
         "checked=\"checked\"" : "");
    $this->assign("setcookie", "checked=\"checked\"");
  } else {
    $this->assign("publish_email", "checked=\"checked\"");
    $this->assign("publish_homepage", "checked=\"checked\"");
    $this->assign("setcookie", "checked=\"checked\"");
  }
}
Und in der Funktion "function new_comment($postid,$replyto = 0) {" fehlt nach
if($insid < 1) {
  $this->standalone_message("Error",
      "Error inserting comment : ".mysql_error());
} else {
(~ Zeile 956) noch folgender Code zum Glück:
if ($_POST['setcookie'] != "1" && !empty($_COOKIE['bblog_userdata'])) {
  setcookie("bblog_userdata", "", time() - 3600, "/", "deine-domain.de");
}

if ($_POST['setcookie'] == "1") {
  $userdata[0] = stripslashes($postername);
  $userdata[1] = stripslashes($posteremail);
  $userdata[2] = stripslashes($pubemail);
  $userdata[3] = stripslashes($posterwebsite);
  $userdata[4] = stripslashes($pubwebsite);

  setcookie("bblog_userdata", implode(";", $userdata),
      time() + 365 * 24 * 3600, "/", "deine-domain.de");
}
Achtung! Hier ist noch etwas manuell anzupassen, weil ich zu faul war, das vom Script automatisch rausfinden zu lassen. Und zwar muss man die letzten beiden Parameter von den beiden setcookie() Aufrufen anpassen - im Beispiel "/" und "deine-domain.example". Es geht um folgendes: Standardmäßig würde der Cookie nur für das aktuelle "Verzeichnis" in der URL gelten. Solange bblog im "ugly-URL" Modus betrieben wird (also z.B. deine-domain.de/index.php?postid=xyz) geht das noch gut, aber wenn man die Pretty URLs aktiviert hat, befindet man sich ständig in "Unterverzeichnissen" wie z.B. deine-domain.de/item/xyz. Wer das jetzt überhaupt nicht geblickt hat, ignoriert es und macht einfach blind nach Anweisung weiter. :)

Beispiele für URLs zum Blog und die daraus resultierenden Parameter:
http://deine-domain.de/ -> "/", "deine-domain.de"
http://www.testseite.de/meinblog -> "/meinblog", "www.testseite.de"

Alles unklar? Sehr schön! Weiter gehts:

Der Rest ist jetzt schnöde Template-Geschichte: Man nehme die post.html des jeweils benutzten Templates, und füge zum einen
Meine Daten merken? <input class="checkbox" name="setcookie"
    type="checkbox" id="setcookie" value="1" {$setcookie} />
irgendwo wo es gefällt ein. Und zum anderen (und letzten) entfernt man bei den beiden "Veröffentlichen"-Häkchen das checked="checked" und ersetzt es durch {$publish_email} (beim E-Mail Addresse Veröffentlichen Kästchen) bzw. {$publish_homepage} (beim anderen).

Ab sofort sollte bBlog einen Cookie namens "bblog_userdata" setzen, wenn jemand das "Meine Daten merken" Kästchen ankreuzt. Wird das Häkchen entfernt und man erstellt einen neuen Kommentar, wird der Cookie gelöscht.

Das war Teil 1 meiner bBlog Modifikationen :)

Geek Gefaselreagieren, kommentieren! (das hat noch niemand zuvor)(17:16 Uhr)

February 26, 2006

» Comment Spam #3

Krass, es hatte einfach gar nichts gebracht. Müssen interessante Parser sein, welche die Comment-Spammer da am laufen haben. Aber mal schaun, ob die ohne menschliche Intervention auch meine zweite Vorstufe zu einem 'richtigen' Captcha knacken können.. harr, harr >:-)

Geek Gefaselreagieren, kommentieren! (2 haben schon reagiert)(21:03 Uhr)

» Comment Spam #2

Habe eine relativ simple Vorstufe zu einem Captcha eingebaut.. das sollte das Comment-Spamming eigentlich ganz gut eindämmen. Jedenfalls bis meine Seite furchtbar berühmt wird. :)

Habe noch so einige weitere Ideen für das gute alte .7x bBlog.. damit meine PHP Kenntnisse nicht ganz so arg einrosten.

Jetzt muss ich mich aber sputen, Faschingszug und so..

Geek Gefaselreagieren, kommentieren! (2 haben schon reagiert)(14:02 Uhr)