Nacktes entsetzen…

…machte sich eben bei mir breit, als ich die heise-meldungen überflog. An sich ist mir eine meldung zum ICQ-client ja sowas von scheißegal, aber ich kenne eben auch menschen, die so etwas benutzen und deshalb mal eine kleine warnung brauchen könnten, wenn eine wirklich kritische lücke bekannt wird.

Das mit dem nackten entsetzen fing schon an, als ich von der eigentlich gemeldeten lücke las:

Ursache des Problems ist eine Format-String-Schwachstelle […]

Vielleicht weiß nicht jeder, wieso so etwas bei mir entsetzen auslösen kann. Deshalb eine kleine (und für absolute laien vielleicht zu kurze) erklärung dazu.

Die formatierte ein-/ausgabe in der programmiersprache C ist wirklich sehr schlicht. Es gibt eine funkzjon printf(), die kriegt als ersten parameter einen string, der angibt, wie die auszugebenden daten formatiert werden sollen, weitere daten können als parameter folgen. Natürlich gibt es diese funkzjon in vielen „geschmacksrichtungen“, damit man auch in dateien, oder in strings hinein formatiert ausgeben kann. Im einem sehr einfachen fall sieht die anwendung dieser funkzjon so aus:

extern int n, m;
printf ("Anzahl: %d/%d (%f%%)\n", n, m, (100.0 * n) / m);

Ja, ich weiß, das ist schrecklich. 😀 Aber es ist auch sehr flexibel. Die formatanweisungen werden mit einem prozentzeichen eingeleitet, darauf folgen weitere angaben zum datentyp und zur breite des ausgabefeldes. Wenn tatsächlich einmal ein prozentzeichen ausgegeben werden soll, muss man eben zwei prozentzeichen schreiben – wie ich in diesem einfachen beispiel auch demonstriert habe. Denn es ist möglich, auch feststehende texte in die formatierte ausgabe aufzunehmen, was übrigens – wie vieles an C – sehr praktisch ist.

Aber diese praktische eigenschaft der stdio-bibliotek verleitet anfänger (!) immer wieder dazu, dass sie ihre texte so ausgeben wollen:

extern char *a_string;
printf (a_string);

Und das sollte man wirklich lassen! Wenn der inhalt der variablen a_string sogar noch aus einer benutzereingabe oder gar aus dem internetz kommt, sollte man es in jedem fall lassen, es ist brandgefährlich. Die korrekte und ungefährliche form, einen solchen text auszugeben, sieht so aus:

extern char *a_string;
printf ("%s", a_string);

Wenn man es nicht so macht, kann ein angreifer beliebige listen von parametern für eine formatierte ausgabe angeben. Die weiteren parameter werden einfach vom stack geholt. Je nach kontext sind auf diese weise buffer-überläufe, stack-manipulazjonen oder auch einfach nur irreführende und gefährliche ausgaben möglich. Wie gesagt, es ist ein absoluter anfängerfehler, wenn man es anders macht.

Und so ein blutiger anfängerfehler steckt also in einem programm, mit dem zurzeit milljonen von menschen im internet unterwegs sind. Wenn ich mir überlege, dass einige dieser anwender nicht besonders sorgsam sind und ihren ICQ-client erst appdäjhten werden, wenn sie ihr windohs neu installieren, denn werden angriffe gegen diesen fehler wohl auch noch in etlichen monaten erfolg versprechen. Wo haben die programmierer dieser aufdringlich bunten IM-softwäjhr eigentlich diese patzer von programmierern herbekommen?

Aber das nackte entsetzen hörte bei dieser vorstellung noch lange nicht auf, denn diese meldung geht ja noch weiter:

Da ICQ für das Rendering von HTML-Nachrichten die Funktionsbibliotheken des Microsoft-Browsers benutzt, (…)

Ja, richtig gelesen!!1! Die betten da einen kompletten internet-exploiter mit allen seinen problemen und schwächen in ein programm ein, nur damit leute beim tschätten etwas bunter machen können. Unfassbar!!1! Es ist denen wohl nicht möglich, dafür eine kleine, harmlose komponente zu nehmen, die HTML kann, aber nichts mit dieser ganzen jauche zu tun hat. Niemand braucht in einer angezeigten tschättzeile möglichkeiten wie „active x“ oder „active scripting“ oder eingebettete multimediale objekte – niemand, außer ein paar schurken, die sich solche permanenten schwachstellen zunütze machen können. Warum zum schwefelkackenden höllenhund wird so ein klaffendes sicherheitsloch in eine an sich harmlose softwäjhr verbastelt?

Wenn ich nur daran denke, wie viele von den menschen, die ich endlich vom brauser-umstieg auf opera oder firefox überzeugen konnte, diese ICQ-jauche weiterhin arglos benutzen und gar nicht verstehen können, weshalb sie sich damit den gleichen gefahren aussetzen, die auch im IE stecken. Da können sie auch gleich weiter mit dem IE im netz versinken und ihren kompjuter von jedem dahergelaufenen verbrecher durchficken lassen!

Wer meint, das sicherheit wichtig ist, sollte ICQ mit einer anderen softwäjhr benutzen – guhgell hilft beim finden. (Auf windohs-maschinen bin ich persönlich begeistert von miranda IM, aber das ist vielleicht eine geschmacksfrage.)

AUA! WordPress neu formatieren

Ich habe es ja schon lange geahnt: wordpress und microsloth winhose sind gar nicht so verschieden. Wenn man so etwas wie das folgende bei der „weblog tools collection“ liest, wird aus dieser ahnung eine pochende gewissheit (übelsetzung von mir):

Wegen meines neuen deseings dachte ich mir, dass es eine gute idee wäre, meine wordpress-installazjon neu zu formatieren – ganz ähnlich, wie man einen pc neu formatiert, um eine neue installazjon von windows darauf vorzunehmen.

(…)

Indem ich nur die inhalte meiner wordpress-datenbank in diese WXR-datei exportierte, bewahrte ich mich davor, den ganzen in der datenbank angesammelten müll in meine neue installazjon von wordpress zu übernehmen.

Man könnte wirklich glauben, hier spricht einer von der winhose-registrierung…

Und was aus einer solchen veröffentlichung einen richtigen brüller macht: Einen link zu dieser meldung sieht gerade jeder wordpress-blogger in seinem „dashboard“. Damit auch jedem klar wird, was für systembedingter müll beim betrieb von wordpress entstehen kann, wenn man nicht gelegentlich mit schmackes in die scheiße greift und das tut, was man manchmal eben so tun muss.

(Aber ich tue es lieber mit ein paar gezielten löschungen in der datenbank.)

Vorübergehend nicht erreichbar

Wer meine blogs „lumières dans la nuit„, „unser täglich spam„, „das voynich-blog“ oder „verschwörung“ liest, hat es bestimmt schon gemerkt: Die sind heute richtig offline. Das gleiche gilt für Franks projekte.

Der grund dafür ist, dass der reguläre betrieb dieser (und einiger anderer) blogs zu einer überlastung des gemeinsam genutzten MySQL-sörvers geführt hat. Daraufhin hat ein adminstrator bei HostEurope kurzer hand entschieden, diese last vom sörver zu nehmen, bis wir (das sind Frank und ich) dieses problem in den griff kriegen. Um das so richtig erfreulich zu machen, habe ich Frank telefonisch gar nicht so richtig erreichen können (inzwischen haben wir gesprochen) und zu allem überfluss muss ich mich mit einem sehr schmalbandigen internetz-zugang durch das netz bewegen. Aber auch damit konnte ich mir relativ schnell die variablen des MySQL-sörvers anschauen und war doch etwas erstaunt über die 16 milljonen slow queries, die sich in den letzten vierzehn tagen angesammelt haben sollen.

(Die slow query time ist bei uns übrigens auf 5 gesetzt. Eine abfrage, die länger als fünf sekunden dauert, ist ganz bestimmt ein problem, wenn damit das internetz bedient werden soll. Niemand hat lust, allzu lange zu warten.)

Mein erster gedanke war, dass mal wieder eine dDoS-attacke gegen eines unserer blogs läuft, wie ich es schon dreimal mit „unser täglich spam“ erlebt habe. Dieser gedanke hat sich jedoch nicht bestätigt, als ich einen blick in die access.log warf. Dort zeigte sich ein zugriffsmuster, das überhaupt keine auffälligkeiten aufwies, so dass ich zunächst vor einem rätsel stand. Ich fragte mich ernsthaft, welche änderungen ich in den letzten tagen an meinen blogs vorgenommen hätte, und neben der einrichtung des BDPRSS-plackins ist mir nichts wesentliches eingefallen. Das BDPRSS-plackin verursacht zwar eine gewisse last auf der datenbank, macht aber in meiner konfigurazjon im durchschnitt alle zwei mintuen eine query zum einfügen und greift ansonsten nur auf die datenbank zu, wenn jemand explizit die seite mit den zusammengefassten fiehds anfordert, was etwa fünfzig mal am tag geschieht. Es ist also nicht zu erwarten, dass hierher die milljonen problematischer abfragen kommen.

Inzwischen hat sich das problem ein bisschen aufgeklärt. Es geht nicht von meinen blogs aus, sondern von Franks blogs. Frank verwendet zur spämm-abwehr das plackin „spam karma 2“, und dieses verursacht (in der bei Frank installierten versjon, frag mich keiner, welche das ist) bei seinen abfragen auf die tabelle sk2_blacklist eine erhebliche last auf dem datenbanksörver. Angesichts der tatsache, dass man leicht pro tag und blog eine vierstellige anzahl von spämmkommentaren, -träckbäcks und -pingbäcks bekommen kann, erklärt das auch die ungefähre größenordnung des problemes.

Frank ist momentan damit beschäftigt, seine blogs auf akismet umzustellen und die datenbank vom dann unnötigen ballast zu befreien. Die zurzeit noch gesperrten internetz-projekte werden dann wieder wie gewohnt verfügbar gemacht, was sich aber wohl noch ein bisschen hinziehen kann.

Unterdessen habe ich schon längst zu ganz anderen maßnahmen gegriffen und mein „lumières dans la nuit“ auf einem anderen sörver repliziert und den A-record im DNS-sörver auf die neue IP gesetzt – das werde ich auch bis auf weiteres so belassen. Ich weiß nicht, welche cache-zeiten bei HostEurope eingestellt sind, gehe aber davon aus, dass es zwei tage sein werden. Es kann also ein bisschen dauern, bis sich die neue konfigurazjon zu allen DNS-sörvern „herumgesprochen“ hat. Bis dahin gibt es dann wohl zwei verschiedene ansichten meines blogs, was keine besonders befriedigende lösung des problemes ist – und ich konnte bislang auch nicht testen, ob die konfigurazjon auf dem neuen sörver wirklich funkzjoniert. Ich bin erfahren genug, um probleme zu erwarten…

So weit, so gut. Der DNS-eintrag wird wohl wieder rückgängig gemacht…

Das wahre wort des tages

Don Alphonso steht an der blogbar und sagt heute einmal sehr wahre worte über die bedeutung von zugriffszahlen und automatischen zählungen durch so etwas wie „blogoscoop:

Das eigentliche Kernproblem, dass nackte Zahlen so gut wie nichts über den tatsächlichen Einfluss, die bedeutung und den Wert eines Blogs aussagen, wird auch Blogoscoop nicht lösen können: 10.000 durch Googlespamming fehlgeleitete Sucher sind immer noch was anderes als 100 Leser, die ein Blog zu schätzen wissen.

Das ist wirklich eine aussage, die ich einmal unterschreiben kann.

Ich habe vor einigen monaten in meinem eigenen blog erlebt, was es bedeutet, wenn die zugriffszahlen einzubrechen scheinen. Aus irgendeinem grund hat mich guhgell nicht mehr gemocht, vermutlich, weil ich die nazi-auszeichnung „rel=nofollow“ für links rigoros entfernt habe. Damals benutzte ich noch guhgell-analüticks, um einen eindruck von verhalten meiner leser und ihren interesse zu bekommen. Jedenfalls hatte guhgell mich „abgestraft“, und was passierte? Es fehlten plötzlich jene sechzig prozent der „leser“, die kurz auf die seite kamen, um zehn sekunden später wieder zu gehen. (Guhgell-analüticks gibt einem eine statistik über die verweildauer.)

Und das – mit verlaub gesagt – sind zwar gezählte leser gewesen, aber keine leser, die zählen…

Das ist mal ein user-agent

Ich habe mich inzwischen daran gewöhnt, dass ein gutes drittel meiner normalen blogleser über tor kommt und nebenbei auch noch alle möglichen weiteren informationen unkenntlich macht. Dass die statistiken ihre aussagekraft verlieren, zeigt mir vor allem, dass die erbsenzählerei von zugriffen auf eine webseit nicht zum wichtigsten gehört. Aber wenn jemand besonders kreativ vorgeht, freue ich mich immer wieder darüber.

Heute hatte ich einen zugriff, dessen "brauser" (natürlich der proxy, ich weiß doch) als user-agent nicht "das übliche" über sich selbst angab, sondern sehr kreativ behauptete, er sei ein "ELV-LS50-Loetkolben".

Zum brüllen komisch, diese vorstellung…

Ein tag mit python und \w

Ich halte python ja für eine größtenteils gut brauchbare programmiersprache, aber manchmal möchte ich den ganzen schrott direkt in die hölle schicken. Zum beispiel gestern, als ich meinen tag verschwendete.

Gestern hatte ich eine etwas seltsame idee für ein künstlerisches projekt. (Es wird noch nichts verraten) Um diese idee umzusetzen, brauchte ich wortlisten, die ich aus den texten von webseiten erzeuge. Den allerersten prototyp habe ich noch in perl geschrieben (ohne ihn richtig auszuarbeiten), und um an die webseiten zu kommen, "missbrauchte" ich den treuen lynx, den besten brauser und reiniger des internetzes aller zeiten.

Nun, als ich sah, dass das konzept funktzjoniert, machte ich mich an die richtige umsetzung. Dafür nahm ich lieber python, weil ich davon ausgehe, dass ich das programm auch in einem jahr noch pflegen und deshalb auch noch verstehen muss. Perl ist zwar schön und unersätzlich für den schnellen häck, aber für etwas größere aufgaben nicht unbedingt die sprache meiner wahl, da die syntax nicht gerade unmittelbar verständlich ist. Ich habe sogar einmal geschrieben, dass ein perl-programm aussieht wie eine missglückte dateikonvertierung.

Und denn setzte ich mich daran, die ausgabe von lynx -dump in python zu parsen. Das erste problem bestand darin, URLs zu erkennen, was mit einem einfachen regulären ausdruck gut gelang. Denn URLs sind keine normalen texte und sollen deshalb auch nicht in der wortliste erscheinen.

Das zweite problem bestand darin, wörter zu erkennen. Wörter sind ja eigentlich zusammenstellungen von alfabetischen zeichen, was mich zur erkennung durch re.compile(r'\w+') brachte. Leider hatte ich meine rechnung ohne python gemacht, denn ein umlaut ist kein alfabetisches zeichen, \w meint also nichts anderes als [a-zA-Z].

Ein blick in die dokumentation offenbarte mir schnell, dass ich dem ausdruck beibringen kann, die aktuelle locale zu berücksichtigen. Dazu ist das flag re.LOCALE zu benutzen. Also habe ich flugs einen import locale und ein locale.setlocale(locale.LC_ALL, '') in mein gehäcksel eingefügt. Die folge war, dass \w immer noch [a-zA-Z] meinte, wofür soll da die locale gut sein. Ich saß beim Frank, als ich häckte, und er schaute beunruhigt nach mir, als ich böse verwünschungen gegen mir persönlich unbekannte programmierer aussprach.

Auch der nächste weg, den ich beschritt, brachte keinen erfolg. Ein regulärer ausdruck kann auch unicode verarbeiten, wenn man ihm das Flag rc.UNICODE gibt. Nun, unicode beherrscht ein ausgereiftes system, zeichen zu klassifizieren, das wird der ausdruck doch denn wohl anwenden können. Dachte ich…

Natürlich musste ich meiner eingabedatei (eine pipe auf lynx) noch ein codec spendieren, damit sie auch wirklich unicode erzeugt. Natürlich habe ich das beim ersten testlauf vergessen. Aber das ist normal, war schnell erkannt und leicht behoben. Und dann stellte ich zu meinem bitterem gallensaft fest, dass \w auf einmal deutlich erweitert war, sogar die umlaute gingen. Aber solche zeichen wie ein asterisk oder ein typografisches anführungszeichen galten auf einmal als alfabetische zeichen, als buchstaben. Und damit war auch dieser weg unbrauchbar.

Ich habe zwischendurch beim strokeln sogar auf das parsen mit einem regulären ausdruck verzichtet und die wörter mit einer kleinen funktion zu filtern gesucht, um die angaben aus der datenbank im modul unicodedata direkt zu verwenden. Das hätte funktioniert, wenn typografische anführungszeichen darin nicht als buchstaben aufgetreten wären. HASS!

Am ende meiner mühen, am ende meines tagesausfluges in die python-dokumentazjon und am ende des tages stand dann die blödeste lösung, die ich mir nur vorstellen kann. Ich habe eine zeichenkette mit erlaubten zeichen, die ich einfach in den ausdruck aufnehme. Und wenn einmal ein wirklich ungewöhnliches zeichen dazwischen kommt (zum beispiel so ein durchgestrichenes "ł" aus einem polnischen namen wie Stanisław), denn versagt meine jetzige implementazjon eben.

Denn fürs erste will ich diesen scheiß nicht mehr sehen!

Solange das so bleibt

Als ich eben meinen ersten blick auf das tollwütig tolle neue bildzeitungsimitat ohne redakzjon namens zoomer geworfen habe, musste ich ja doch ein bisschen grinsen. Das liegt daran, wie die in ihren interna damit angeben, dass sie schon vor ihrem offizjellen erscheinen in guhgell an der ersten stelle gelistet werden…

…wenn man nur nach den richtigen suchbegriffen sucht:

Noch offline aber schon oben bei google! Okay – vorausgesetzt, ich suche nach zoomer.de …

Nun, solange das genau so bleibt und nicht anders wird, bin ich damit sehr einverstanden. Wer „zoomer.de“ in guhgell eingibt, darf gern bei „zoomer.de“ landen und die dürfen auch ruhig ganz oben stehen – und sonst bitte niemals

Ich bin gespannt, wie viele deppen sich von dieser nutzergenerierten bulewar-jornallje anziehen lassen und dem betreiber einen hübschen datensatz mit einem kompletten interessenprofil zur verfügung stellen. Was beim studivz geklappt hat, das geht gewiss auch dort.

Hier ändert sich jetzt einiges

Für den ursprünglichen zweck dieses blogs, das veröffentlichen kurzer mitteilungen und hinweise, habe ich jetzt ein nebenprojekt meines eigentlichen blogs gestartet, so dass dieses blog gar nicht mehr nötig ist: Nachtwächter-Blah.

Ich werde dennoch dieses blog nicht völlig verschwinden lassen. Aber es wird in zukunft nur noch mit sehr geringer frekwenz befüllt werden, da es jetzt keine klare aufgabe mehr für mich hat. Wahrscheinlich werde ich es für eher seltene mitteilungen aus den abgründen der programmierung verwenden, immer wieder einmal ergänzt um eine kurze mitteilung zu einem leicht abseitigen thema. Aber darüber bin ich mir noch nicht klar. Bis ich mir darüber klar geworden bin, ruht mein pohsten auf diesem blog.

Aber dafür gibt es jetzt ja etwas anderes.

Das bildblog war ziemlich schwer zu erreichen…

Das bildblog wurde geheist. Jetzt hat es das bildblog wirklich geschafft, durch eine presserat-akzjon große aufmerksamkeit zu kriegen, hoffentlich auch von jenen, die es sonst nicht lesen. Ob es das war, was der springerverlag wollte? Wohl kaum. Wenn jetzt auch nur ein paar prozent der leser dieser auflistung des gehässigen und peinlichen damit aufhören würden, regelmäßig dieses kampfblatt der totalitären mittelmäßigkeit zu kaufen oder auch nur zu lesen, denn wäre meine freude vollkommen.

Aber davon ist nicht auszugehen. Was heute im zentrum der aufmerksamkeit steht, ist morgen schon der schnee von gestern. Nur gewohnheiten sitzen tiefer, obs das lesen der bildzeitung oder das lottospielen ist.

Jeder kann ja Environment.NewLine tippen…

Dot net oder doch nicht – jedenfalls ist dieses hingestümperte kohd-fragment vom feinsten (witz):

 public static string CRLF {     get     {       char chrCR = (char)13;       string strCR = chrCR.ToString();        char chrLF = (char)10;       string strLF = chrLF.ToString();       string strCRLF = strCR + strLF;        return strCRLF;     } }  

Dümmer gehts nimmer – man beachte den sauberen kohdingstil und die korrekte benamsung der lokalen variablen in kombinazjon mit der unfähigkeit, mal eben den sprachumfang zu benutzen! So etwas kann nur ein progger proggen, der für seine zeit und nicht für seine kwalität bezahlt wird. Gefunden bei wtf

Es sieht nach nichts aus…

…und es war doch so viel mühe mit kleinen fehlern und großen unstimmigkeiten in den kwelltexten anderer menschen: mein blog "lumières dans la nuit" hat jetzt eine zusammenstellung der neuesten beiträge aus meinen lieblingskwellen.

Schade nur, dass eine kwelle darin (noch) schmerzlich fehlt. Fefes blog ist der wohl angenehmste filter für den täglichen auswurf des nachrichtenbetriebes, setzt aber leider in seinem volltext-RSS-fied keine zeitangabe. Und damit kommt der parser einfach nicht so richtig klar. Schade drum, denn dieses blog hätte darin wirklich gefehlt…