Hacking – Was ist das eigentlich?

31 10 2012

Allzu oft stelle ich ein eklatantes Missverständnis fest, was es mit dem Begriff des „Hacking“ überhaupt auf sich hat. Da wird vom gehackten Facebook Profil gesprochen oder gefragt, kann man dies oder jenes nicht mal eben hacken? Ich tue mich ziemlich schwer, einem technischen Laien den Sachverhalt näher zu bringen. Heute bin ich über ein tolles Video eines Vortrags von Sebastian Schreiber, Geschäftsführer der SySS GmbH gestolpert. Diese Firma macht nichts anderes, als Sicherheitslücken diverser Software zu suchen, man könnte also behaupten, sie verdienen ihr Geld mit dem Hacken. Das ist sehr schön anschaulich erklärt, weshalb ich auch gleich das Video für sich sprechen lassen möchte.

Index:
03:13 Nokia-Handys als Abhör-Wanzen
08:00 Angriffe gegen Shop-Systeme
13:00 BIOS-Passwortschutz brechen
16:30 USB
25:00 Windows-Passwortschutz brechen / USB
34:26 Barcode-Anagriffe mittels manipulierten Barcodes
39:00 Hardwarespion
44:50 Angriff auf Zahlungssystem (iPayment)
49:15 Angriff auf Lock-Code eines Smartphones
55:40 Überwachungskamera
57:15 „Mogeln bei Moorhuhn“ – der andere Weg zum Highscore
1:01:40 Google-Hacking





Facebook: Der Fake mit der Fanseiten-Umstellung

14 10 2012

Sie ist einfach nicht totzubekommmen, die Falschmeldung in der sich Facebook-Mitglieder brüskieren, Mr. Zuckerberg habe seine Fanseiten derart umgestellt, um endlich arme Mitglieder ungezügelt abzocken zu können. Den Text sieht man in verschiedenen Varianten, ähnelt aber ungefähr immer diesem hier:

ACHTUNG!

Anscheinend hat Facebook die Fanseiten umgestellt, so dass Euch nicht mehr alle Beiträge erreichen, die von uns gepostet werden. Facebook macht das, damit man für eine größere Reichweite der Beiträge Kohle locker machen darf (als Betreiber der jeweiligen Seite, so wie wir das sind). Deshalb bitte folgendes bei Euch ein
stellen, um trotzdem alle Beiträge von […] zu bekommen:

1. Oben rechts das kleine Zahnrad anklicken
2. Auf „Zur Interessenliste hinzufügen“ klicken
3. „Neue Liste“ anlegen, wenn ihr noch keine habt
es kann nicht sein das man bei FB für seine Seiten auch noch Kohle zahlen soll.

Gut, wenn ihr keine Kohle zahlen wollt, dann lasst es doch einfach. Oder verlasst besser gleich Facebook komplett. Alternativen gibt es genug, ihr als User seid das Kapital des Unternehmens. Wenn ihr abwandert, macht es die Konkurrenz vielleicht besser.

Ganz so böse wie hier behauptet, ist Facebook dann allerdings doch nicht. Als Seitenbesitzer bekommt man zwar in der Tat das Angebot, seine Beiträge für Bares an ein größeres Publikum zu senden, aber das ist nur ein Zusatzangebot. Tatsächlich wurden diese bisher aber auch immer schon nur an einen geringen Prozentsatz der „Follower“ gesendet.

Stellen wir uns den User Heinz-Herbert bei Facebook vor. Heinz-Herbert hat 500 Freunde und bei noch einmal so vielen Seiten auf „Gefällt mir“ geklickt. Würde er jetzt von diesen insgesamt 1.000 Stellen sämtliche Nachrichten erhalten, würde er irgendwann in einem Wust aus Meldungen ersticken. Schreibt jeder von diesen 1.000 Kontakten 10 Meldungen am Tag (dazu gehören auch Statusmeldungen und ähnlich uninteressanter Quatsch), würden 10.000 Meldungen am Tag durch Heinz-Herberts Timeline flutschen. Damit das nicht passiert, wird ihm von jedem Kontakt nur ein bestimmter Prozentsatz in seiner Timeline angezeigt. Auf den Seiten selbst sieht er natürlich trotzdem alles, was jemals gepostet wurde.

Wie viel vom jeweiligen Freund oder der Seite angezeigt wird hängt immer von der Interaktion mit diesem bzw. dieser ab. Schreibt Heinz-Herbert mit Ingelore ständig im Chat, kommentiert die Beiträge, klickt den Daumen, dann sieht er ihre Meldungen deutlich häufiger als die von Diethelm, mit dem er ansonsten nichts zu tun hat. Das Angebot von Facebook besteht nun also darin, einen neuen Artikel der Seite „Suppen-Schneider“ nicht nur wie bisher vielleicht 10% der Fans anzuzeigen, sondern diesen Prozentsatz deutlich zu erhöhen. Man kauft sich also mehr Views für seinen Beitrag. Da wurde allerdings nichts umgestellt, die Funktion, dass Texte immer nur einem geringen Prozentsatz der Fans angezeigt wird war schon immer so. Es handelt sich also um ein neues, kostenpflichtiges Zusatzfeature.

Der Tipp, eine Interessensliste für Fanseiten anzulegen ist zudem vollkommen unsinnig. Dieses Feature ist bei Twitter abgekupfert und soll Ordnung in die Vielzahl der Seiten bringen, die man im Laufe seines Facebook-Lebens mit einem „Gefällt mir“ adelt. Auf https://www.facebook.com/addlist können wir eine neue Liste erstellen, sagen wir mal „Vegane Metzgereien“ und schieben uns hier die passenden Händler rein. Dann dürfen wir den Namen vergeben und noch die Sichtbarkeit auf privat, sichtbar nur für Freunde oder offen für alle einstellen. Schon haben wir im Seitenmenü unter „Interessen“ unsere erste Liste, in der uns nur Beiträge der gerade gewählten Seiten angezeigt werden. Klicken wir künftig bei einer Seite auf „Gefällt mir“, können wir ab sofort auch gleich noch die Liste wählen, in der die Seite landen soll.

Natürlich bedeutet dies nicht, dass wir jetzt sämtliche Beiträge der Seiten in unserer Timeline sehen. Im Gegenteil, wir müssen sogar noch explizit in die Liste rein schauen, was ich zumindest ganz gerne vergesse (wenigstens dürfen wir die Listen auch zu unseren Favoriten hinzufügen). Damit hätte sich dann also der gewünschte Erfolg des Seitenbetreibers ins Gegenteil gekehrt. Von daher wären Listen durchaus sinnvoll zur Sortierung, jedoch in dem beschriebenen Zusammenhang eher als kontraproduktiv anzusehen.

Der Hintergedanke mag gewesen sein, dass in einer Liste mit begrenztem Umfang an enthaltenen Seiten deutlich mehr Beiträge der einzelnen Seiten aufgeführt sind. Ob das tatsächlich so ist müsste man überprüfen, vorstellen kann ich mir das deshalb nicht, weil sich Facebook damit das eigene Geschäftsfeld kaputt machen würde. Der Prozentsatz der beim User angezeigten Meldungen einer Seite dürfte sich wenn überhaupt nur marginal erhöhen.

Update 30.10.2012:
Da es schon einige Reaktionen auf diesen Artikel gab nun eine kurze Aktualisierung. Diesen hatte ich grundsätzlich deshalb geschrieben, weil mich die ständigen Aufrufe in Facebook nervten. Das was ich schrieb beruhte hauptsächlich auf Vermutungen, die ich in der Zwischenzeit versucht habe, etwas zu verifizieren.

Zunächst zum Aufruf selbst. In diesem wird zwar meist kurz und bündig erklärt, man solle die Seite in eine Liste aufnehmen, was es damit auf sich hat und welche Vorteile diese bietet bleibt allerdings für den unbedarften Nutzer im Dunkeln. Und genau diesem unterstelle ich auch, selbst wenn er es schafft eine solche zu erstellen, wird die Liste über kurz oder lang in Vergessenheit geraten und die Aktion damit ad absurdum geführt.

Grundsätzlich stimmt es tatsächlich. Wenn ich eine Liste erstelle und dort eine Seite rein packe, wird mir von dieser deutlich mehr angezeigt als in meiner normalen Timeline. Oder sagen wir, so ist das bei dem Durchschnitts-User. Trotzdem gebe ich denjenigen nicht Recht, die behaupten, eine Liste wäre die Wunderwaffe. Habe ich nämlich nur bei 10 Seiten (ich rede jetzt der Einfachheit halber von Seiten, dazu würden aber eigentlich auch die Freunde zählen) „gefällt mir“ geklickt, dann wird mir auch in meiner Timeline deutlich mehr von jeder einzelnen Seite angezeigt, als wenn ich Fan von 10.000 Seiten bin. Macht Sinn, wie ich hier bereits erklärt habe. Denn sonst würde ich ersticken in einem Wust von Meldungen. Es ist grundsätzlich also eine gute Funktion von Facebook, mir mehr Inhalte von den Seiten anzuzeigen, mit denen ich in aktiver Kommunikation stehe. Natürlich fühlen sich dann auch viele benachteiligt. Interessieren mich also wirklich 10.000 Seiten, dann müsste ich die alle in eine Liste packen – und siehe da, je mehr Seiten ich in meiner Liste habe, desto weniger wird mir wieder von jeder Einzelnen angezeigt, hier greift also genauso der Algorithmus wie in der Timeline. Wer mir das nicht glaubt, soll es einfach ausprobieren und nicht einfach das Gegenteil behaupten. Um das zu umgehen könnte ich mir 1.000 Listen anlegen, dann hätte ich in jeder Einzelnen wieder mehr Updates von jeder Seite. Ob das Sinn macht? Zur Sortierung in einem gewissen Umfang sicherlich, deshalb nutze ich Listen persönlich auch ganz gerne. Um alle Updates zu sehen? Ich bleibe bei meinem „Nein“ und behaupte auch, dass ich gar nicht wirklich alles sehen möchte.

Was ist nun mit der Aussage, dass durch die gesponserten Artikel kaum mehr kostenlose Updates angezeigt werden? Dazu möchte ich einfach fragen, auf was für Seiten ihr eure Likes verteilt? Bis heute ist mir nicht eine(!) einzige bezahlte Meldung untergekommen. Sicherlich, zum allergrößten Teil gefallen mir unkommerzielle Seiten, von daher bleibe ich glücklicherweise verschont davon. Wenn es euch nervt, dann entzieht doch einfach den Seiten euren Daumen, die sich die Leserschaft kaufen. Klar, wenn von meinen 10.000 Seiten 500 dabei sind, die sich andauernd meine Aufmerksamkeit erkaufen werden die restlichen 9.500 nicht kommerziellen Projekte in den Hintergrund gedrängt. Aber da muss einfach jeder selbst wissen, was ihn selbst interessiert. Denn steuern könnt ihr das immer noch selbst. Auch das Netzwerk, auf dem ihr euch aufhaltet gibt euch niemand vor. Warum seid ihr überhaupt auf Facebook, wenn ihr mit deren Geschäftsgebaren nicht einverstanden seid? Alternativen gibt es wirklich zur Genüge.





10 Finger Tippen: Geschwindigkeitstests

2 10 2012

Hat man sich erst einmal daran gewöhnt, alle zehn Finger, bzw. normalerweise sind es derer ja eher neun die auf die Tasten hauen, zum Tippen zu nutzen, möchte man die eigene Geschwindigkeit doch vielleicht auch einmal testen um die Lernerfolge zu überprüfen. Dafür gibt es einige Seiten mit Geschwindigkeitstest, die man online absolvieren kann. Schauen wir uns ein paar davon doch etwas näher an.

TypingTest.com

Englischsprachige Webseite, die allerdings auch deutsche Texte anbietet.

  • Der Test läuft wahlweise über eine, zwei oder drei Minuten.
  • Fehler können korrigiert werden, auch über mehrere Worte zurück. Fehler zählen immer als ein Punkt, durch einen vergessenen Buchstaben gibt es keine Verschiebung.
  • Während des Tippens werden die verbleibende Zeit sowie die aktuelle Tippgeschwindigkeit angezeigt.
  • Insgesamt neun Sprachen stehen zur Auswahl.
  • Es werden nur wenige verschiedene Texte angeboten, hierbei handelt es sich um echte Sätze.
  • Nach dem Test wird eine kurze Statistik angezeigt.

 

keybr.com

Englischsprachige Webseite, die allerdings auch deutsche Texte anbietet.

  • Der Test läuft äußerst lange, ich habe es noch nicht bis zum Ende durchgehalten, sofern ein solches überhaupt zu erreichen ist.
  • Fehler können nicht korrigiert werden, der Ablauf verharrt auf dem falsch geschriebenen Buchstaben, bis dieser korrekt getippt wurde.
  • Während des Tippens wird die durchschnittliche Tippgeschwindigkeit angezeigt.
  • Insgesamt sieben Sprachen stehen zur Auswahl.
  • Es werden zusammenhanglose, vor Fehler strotzende Worte angeboten, was die Koordination Auge zu Hand deutlich erschwert. Alternativ können auch eigene Texte kopiert oder die URL einer Webseite angegeben werden. Bei manchen Webseiten kann es hier zu Problemen mit den Umlauten kommen (spiegel.de).
  • Es wird eine ewige Bestenliste unter „High Scores“ angezeigt.

 

www.schreibtrainer-online.de

Eigentlich ein Schreibtrainer zum Üben des Zehn-Finger-Tippens. Über die Option „Beispieltexte“ können verschiedene Texte bzw. über „Mein text“ eigene Texte getippt werden.

  • Der Test läuft immer bis zum Ende des Textes
  • Fehler können nicht korrigiert werden, die Rücktaste wird sogar als Fehler gewertet.
  • Während des Tippens werden die bereits vergangene Zeit sowie die Fehler und verbleibenden Buchstaben angezeigt.
  • Insgesamt vier Sprachen stehen zur Auswahl.
  • Es werden verschiedene Texte aus den aktuellen Nachrichten angeboten, alternativ können sogar eigene Texte kopiert werden.
  • Nach dem Test wird eine kurze Statistik angezeigt.

 

Typeracing

Bietet den interessanten Ansatz, dass man mit seiner Tippgeschwindigkeit Autos antreibt, die in einem Rennen gegen andere Gegner antreten. Hier kann man im Solo-Modus gegen Computergegner bzw. im Muliplayer-Modus in Echtzeit gegen andere Spieler antreten. Leider ist die ganze Seite recht fehlerbehaftet und wird des öfteren offensichtlich manipuliert.

  • Der Speedtest läuft wahlweise über über eine, drei, fünf oder zehn Minuten.
  • Der Racing Modus kann im Single- oder Multiplayer Modus gespielt werden.
  • Fehler können und müssen korrigiert werden, der Test läuft erst weiter, wenn der bisherige Text vollständig korrekt getippt wurde
  • Während des Tippens werden die verbleibende Zeit sowie die durchschnittliche Geschwindigkeit angezeigt.
  • Insgesamt zwei Sprachen stehen zur Auswahl.
  • Man kann zwischen Zitaten aus diversen Büchern, zufällig aneinandergereihten Worten oder reinen Zahlenreihen wählen.
  • Nach dem Test wird eine kurze Statistik angezeigt.

 

TypingSpeed

Bietet einen einfachen Geschwindigkeitstest.

  • Der Test läuft wahlweise über über eine, drei oder fünf Minuten.
  • Fehler können korrigiert werden. Wird beispielsweise ein Buchstabe ausgelassen, werden alle nachfolgenden Buchstaben durch die Verschiebung als falsch gewertet.
  • Während des Tippens werden die verbleibende Zeit sowie die aktuelle Tippgeschwindigkeit angezeigt.
  • Insgesamt sechs Sprachen stehen zur Auswahl.
  • Es wird nur eine Auswahl häufig genutzter Worte verwendet, die zufällig angeordnet werden. Somit stehen keine sinnvollen Sätze zur Verfügung.
  • Eine Rangliste zeigt die besten Tipper der letzten sieben Tage.

 

10FastFingers
Zwei Optionen stehen zur Verfügung: Alleine gegen die Zeit zu schreiben oder an einem Wettbewerb teilzunehmen. An einem Wettbewerb können innerhalb von 24 Stunden beliebig viele Personen beliebig oft teil nehmen. Es lassen sich allerdings auch private Wettbewerbe anlegen, die man nur an Freunde weiter gibt.

  • Der Test läuft immer über eine Minute.
  • Fehler können korrigiert werden, allerdings immer nur für das jeweilige Wort.
  • Während des Tippens wird die verbleibende Zeit angezeigt.
  • Viele verschiedene Sprachen stehen zur Auswahl.
  • Es wird nur eine Auswahl häufig genutzter Worte verwendet, die zufällig angeordnet werden. Somit stehen keine sinnvollen Sätze zur Verfügung.
  • Eine Rangliste zeigt die besten Tipper der letzten 24 Stunden. Die einzelnen Wettbewerbe zeigen jeweils eine eigene Rangliste.
  • Mit einer Registrierung werden die eigenen Erfolge dauerhaft gespeichert, Statistiken werden angezeigt und es gibt verschiedene Erfolge zu erreichen.





Warum PowerPoint nicht zum Dateiaustausch taugt

26 05 2012

Ein beliebter Zeitvertreib im Internet scheint es zu sein, Bilder-Slideshows mit Hintergrundmusik im PPS Format per E-Mail an Freunde und Bekannte zu versenden. Ob eine E-Mail hierfür das geeignete Transportmedium ist, sei dahingestellt. Immerhin wurde dieses Format für reine Textnachrichten entworfen. Die RFC 5322 sagt hierzu „This document specifies a syntax only for text messages. In particular, it makes no provision for the transmission of images, audio, or other sorts of structured data in electronic mail messages.“ Dass MIME Erweiterungen existieren, bedeutet noch lange nicht automatisch, dass diese auch zweckmäßig für den Dateiaustausch sind.

Doch stellen wir uns die Frage, wie zweckmäßig es ist proprietäre Dateiformate für die Speicherung unserer Slideshow zu verwenden. Zunächst ein Zitat von Openformats.org: „Wir wollen ein Dateiformat als proprietär bezeichnen, wenn der Modus mit dessen Hilfe die Daten präsentiert werden und dessen Spezifikation nicht öffentlich verfügbar sind. Proprietäre Formate werden von Softwarefirmen entwickelt, um Daten an ihre Anwendungen zu binden: nur Programme, die von Softwarefirmen veröffentlicht werden, die auch im Besitz der Spezifikationen sind, können die Daten korrekt und vollständig auslesen. […] Der Besitzer eines solchen Patents kann anschließend Patentgebühren für die Implementierung des Formats in andere Programme verlangen.

Bei .pps handelt es sich also um ein von Microsoft erschaffenes Dateiformat, für das sie das alleinige Recht besitzen, dieses in ihren Programmen zu verwenden. Dieses Format wird in den Microsoft Office PowerPoint Programmen bis einschließlich zur Version 2003 eingesetzt, ab Version 2007 wurde OpenXML mit der Extension .ppsx eingeführt, das zwar das „Offen“ im Namen trägt, trotzdem wieder einen Microsoft Alleingang darstellt.

Das .pps Format ist also Eigentum einer einzigen Firma, Microsoft. Möchte man derartige Dateien nutzen, ist der Anwender also gezwungen, Programme dieser Firma einzusetzen, die natürlich teuer bezahlt werden wollen. Aktuell verlangt der Softwarekonzern für eine aktuelle Version von PowerPoint stolze 189 Euro. Ganz unabhängig von dem Preis ist zu bedenken, dass es die MS Office Produkte ausschließlich für Microsoft Windows (also wieder eine Bezahl-Software des gleichen Konzerns) oder Mac (eine Bezahl-Software eines noch übleren Konzerns) gibt. Besitzer anderer Betriebssysteme bleiben außen vor.

Nun mag man anmerken, dass auch LibreOffice in der Lage ist, dieses Dateiformat zu öffnen. Ja, könnte man antworten, muss dabei allerdings wissen, dass die Unterstützung hier nie hundertprozentig sein kann, da es sich um eine eigene Software handelt, die eben nicht versucht das Microsoft-Produkt bis ins Detail nachzubilden. Von daher ist immer mit Inkompatibilitäten bei einigen Sonderfunktionen zu rechnen.

Dann gibt es noch den PowerPoint Viewer für Linux Systeme, der eine möglichst exakte Wiedergabe von PowerPoint Dateien sicherstellen sollte. Der Pferdefuß ist allerdings, dass es sich um keine native Linux-Software handelt, sondern lediglich die Windows-Software mit dem Windows Compatibility Layer WINE „irgendwie“ zum Laufen gebracht wird. Alleine die mit Wine mitgelieferten Windows-Bibliotheken haben in einem sauberen Linux System aber überhaupt nichts verloren, da sie das System nicht nur unnötig aufblähen, sondern im schlimmsten Fall die Systemstabilität negativ beeinflussen.

Was also tun? Ganz einfach, man verwendet KEINE proprietären Dateiformate! LibreOffice beispielsweise verwendet das OASIS Open Document Format for Office Applications, einen quelloffenen Standard für Dateiformate, den jeder Entwickler einsehen und in seiner Anwendung verwenden kann. Da bereits LibreOffice eine OpenSource Anwendung ist kann diese kostenfrei auf Windows, Mac OS X sowie den verschiedensten Linux und Unix-Derivaten eingesetzt werden.

Doch warum überhaupt Bilderslideshows in solch eine Datei packen, wenn man diese eh Online versenden möchte? Da macht es doch viel eher Sinn, die Grafiken gleich Online zu stellen. Grafikviewer gibt es mehr als genügend, sowohl gehostete Dienste wie Flickr oder Photobucket, als auch fertige Skripte zum Selbst-Hosten.

Möchte man Hintergrundmusik in seiner Slideshow haben, ist auch das möglich. Mit dem HTML5 <AUDIO> Tag ist man hierfür noch nicht einmal mehr auf Flash angewiesen. Die SlideshowBox liefert ein schönes Beispiel hierfür. Ganz unabhängig davon ist eine PowerPoint Präsentation ohnehin nicht das geeignete Format, um Multimediainhalte einzubinden. Multimediadateien werden lediglich verlinkt und beim Abspielen an das entsprechenden Multimedia-System des abspielenden Systems weiter gereicht. Unterstützt dieses den entsprechenden Codec nicht, wird verständlicherweise auch nichts wiedergegeben.





Ihr seid also die Urheber?

14 05 2012

Mit einer neuen Aktion „Wir sind die Urheber“ versuchen einige Künstler sich zur Zeit mit allen Mitteln lächerlich zu machen. Doch fangen wir von vorne an, worum geht es überhaupt?

Auf Initiative eines gänzlich unbekannten Herrn Namens Matthias Landwehr haben inzwischen mehrere hundert Autoren auf der Webseite www.wir-sind-die-urheber.de etwas unterschrieben, was sie offensichtlich gar nicht begreifen. Dort finden sich nämlich neben ein paar Phrasen keine weiteren Informationen, worum es überhaupt geht. „Mit Sorge und Unverständnis verfolgen wir als Autoren und Künstler die öffentlichen Angriffe gegen das Urheberrecht.“ Welche Angriffe gemeint sein können, was sie für Forderungen oder Verbesserungsvorschläge haben, darüber schweigt sich die Seite aus. Nicht nur dort, auch auf konkrete Anfragen gehen die wenigsten Angeschriebenen ein, allen Voran nicht Herr Landwehr. Siehe dazu Die unbegründete Angst, Urheberrechtsverletzungen und rechtswidrige Webseiten.

Die Unterzeichner geben ihren guten Namen also für bloße Polemik her, ob ihnen das bewusst war oder ob sie nur irgend etwas tun wollten, das sei dahingestellt. Das alleinige Recht, für alle Urheber zu sprechen haben sie indes ganz bestimmt nicht. Auf der Gegenbewegung „Wir sind Urheber“ sprechen beispielsweise eine hohe Anzahl an Unterstützern diesen Künstlern die Befugnis ab, für «die Künstler» zu sprechen. Ob es schon zu spät ist, ihre Initiative umzutaufen in „wir sind ein paar verschrobene Urheber, die neulich von diesem «Internet» gehört haben“?

Dass man mit Argumenten mehr bewirken kann denn mit der bloßen Aussage „das ist böse, mach das weg“ beweist die Aktion „Wir sind Bürgerinnen und Bürger“ , die konkrete Regelungen zu einem modernen Urheberrecht fordern. Mit einer sachlichen Diskussion lässt sich dann wohl auch eine Eskalation des Streits verhindern, im Zuge dessen Anonymous inzwischen Adressen, Geburtsdaten und Telefonnummern von etwa 100 Unterzeichnern von „Wir sind die Urheberveröffentlichte. Eine kindische Aktion sicherlich, die aber als logische Konsequenz auf die Provokation gesehen werden muss. Und anders als von den Betroffenen behauptet wurden diese Informationen eben nicht illegal beschafft, sondern in Fleißarbeit online zusammen gesammelt.

Von daher, liebe Urheber, stellt euch nicht ins Abseits mit solch dümmlichen Versuchen, Öl ins Feuer zu kippen sondern beteiligt euch an einer sachlichen Diskussion, macht Vorschläge. Oder ist euch das einfach zu viel Arbeit? Mehr Aufwand sicherlich, als seinen Namen unter eine Petition zu setzen, die man zuvor noch nicht einmal gelesen oder den Hintergrund gar verstanden hat.





PHP: Daten innerhalb von HTML Tags extrahieren

5 05 2012

Um an die Links in einem String zu gelangen, sieht man immer wieder abenteuerliche Regex http://de3.php.net/regex Konstrukte. Eines haben diese neben der schlechten Lesbarkeit häufig gemeinsam, nämlich dass sie nicht zuverlässig arbeiten. Statt also das Rad neu zu erfinden, sollte man hier besser auf die gegebenen Funktionen des Document Object Models zurück greifen.

Wir wollen also aus einem Text alle Werte in <a href=“http://www.example.org/„> heraus filtern. Zu beachten ist, dass damit keine unverlinkten URLs gesucht werden, sondern nur der Inhalt innerhalb des href=“…“

<?php

$text = 'Lorem ipsum dolor sit amet, consetetur http://example.org sadipscing 
elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam 
erat, sed diam voluptua. At <a 
href="http://suchen.mobile.de/auto/search.html?scopeId=C&isSearchRequest=true&sortOption.sortBy=price.consumerGrossEuro">vero</a> 
eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no 
sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, 
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et 
dolore magna aliquyam erat, sed diam voluptua. <a 
href="http://www.example.com#link">www.example.net</a>At vero eos et 
accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea 
takimata sanctus est Lorem ipsum dolor sit amet.';

// Erzeuge ein neues DOM Dokument
$dom = new DOMDocument();
// Keine Fehlerpruefung erzwingen
$dom->strictErrorChecking = false;
// Den String einlesen
@$dom->loadHTML($text);
// Die Links innerhalb des <a ...> Tags suchen
$links = $dom->getElementsByTagName('a');
// Fuer alle gefundenen Links
foreach($links as $link) {
	// Wenn der a Tag ein Attribut href hat...
	if ($link->hasAttribute('href')) {
		// ...den Inhalt auslesen
		$href = $link->getAttribute('href');
		// Bildschirmausgabe
		echo $href.'<br />';
   }
}

Die Ausgabe liefert uns beide Links:
http://suchen.mobile.de/auto/search.html?scopeId=C&isSearchRequest=true&sortOption.sortBy=price.consumerGrossEuro
http://www.example.com#link

Mittels XPath kann man auch innerhalb beliebiger Tags nach Inhalten suchen. Nehmen wir an, wir möchten alle Texte innerhalb der <td>…</td> Tags von Tabellen. Das Beispiel entsprechend angepasst:

<?php

$text = 'Lorem ipsum dolor sit amet, consetetur http://example.org sadipscing 
elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam 
erat, sed diam voluptua. At <a 
href="http://suchen.mobile.de/auto/search.html?scopeId=C&isSearchRequest=true&sortOption.sortBy=price.consumerGrossEuro">vero</a> 
eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no 
sea takimata sanctus est Lorem ipsum dolor sit amet. 
<table>
<thead>
<tr><th>Kopf</th></tr>
</thead>
<tbody>
<tr><td>Zeile 1</td></tr>
<tr><td>Zeile 2</td></tr>
<tr><td>Zeile 3</td></tr>
</tbody>
</table>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod 
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. 
<a href="http://www.example.com#link">www.example.net</a>At vero eos et 
accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea 
takimata sanctus est Lorem ipsum dolor sit amet.';

$dom = new DOMDocument();
$dom->strictErrorChecking = false;
@$dom->loadHTML($text);
// XPath erzeugen
$xpath = new DOMXPath($dom);
// Der Pfad zu unseren gewuenschten Inhalten: table -> tbody -> tr -> td
// Würden wir den Wert eines Attributs suche, müssten wir dieses mit @ kennzeichnen
// Beispiel: $xpath->query('//a/@href');
$inhalte = $xpath->query('//table/tbody/tr/td');
foreach($inhalte as $inhalt) {
    echo $inhalt->nodeValue.'<br />';
}

Als Ausgabe erhalten wir:

Zeile 1
Zeile 2
Zeile 3




Medien einbinden mittels oEmbed

5 05 2012

Auf einer dynamischen Webseite das Einbinden von Object-Elementen zuzulassen birgt gewisse Risiken. Möchte man ein YouTube Video auf seiner eigenen Homepage anzeigen, präsentiert einem die Video-Plattform dazu den Code in Form eines Object-Elements bzw. neuerdings als Iframe an. Hiermit stehen die Tore für einen böswilligen Angriff weit offen, denn was genau da eingebunden wird lässt sich nur schwerlich automatisiert kontrollieren. Auf vielen Social Network Plattformen wird das Video automatisch angezeigt, sobald man lediglich die URL zur entsprechenden Seite einfügt. Doch wie funktioniert das?

Auch wenn die Nutzer dies nicht tun dürfen, kommt man nicht umhin, den Einbettungs-Code des entsprechenden Anbieters in seine Seite einzubinden. Doch wie kommt man da ran? Eine recht einfache Möglichkeit hierzu bietet oEmbed, das unter anderem von YouTube, Vimeo oder Soundcloud unterstützt wird. Über die API können wir auf die vom Anbieter zur Verfügung gestellten Informationen zugreifen. Verdeutlichen wir dies anhand eines Beispiels.

Wir möchten Big Buck Bunny von Vimeo auf unserer Seite einbinden. Hierzu benötigen wir zunächst die URL, unter der dieses Video eingebunden ist. Diese lautet http://vimeo.com/1084537. Praktischerweise finden wir auf oembed.com bereits eine Beschreibung für diesen Anbieter. Die Liste ist nicht vollständig, es kann sich also durchaus lohnen, in der jeweiligen Dokumentation nach dem Stichwort oEmbed zu suchen.

<?php

$vimeo = 'http://vimeo.com/api/oembed.xml?url=';
$video = 'http://vimeo.com/1084537';

// Zusammenbauen der URL
$url = $vimeo.urlencode($video);
// Holen der Informationen vom Anbieter. Wir nutzen das XML Format,
// meist wird aber auch JSON angeboten
$daten = @simplexml_load_file($url);
// Fehlerpruefung
if (preg_match('#^HTTP/... 4..#', $http_response_header[0])) die ('Kein Zugriff auf die Daten möglich: '.substr($http_response_header[0], 9));
// Ausgabe des Videos
echo $daten->html;

Das war es auch schon. In unserem Objekt haben wir alle Informationen zu dem Video, inklusive dem HTML Tag zur Einbindung. Hier die vollständige Ausgabe von $daten:

SimpleXMLElement Object
(
    [type] => video
    [version] => 1.0
    [provider_name] => Vimeo
    [provider_url] => http://vimeo.com/
    [title] => Big Buck Bunny
    [author_name] => Blender Foundation
    [author_url] => http://vimeo.com/user508904
    [is_plus] => 0
    [html] => < iframe src="http://player.vimeo.com/video/1084537" width="1280" height="720" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
    [width] => 1280
    [height] => 720
    [duration] => 596
    [description] => Big Buck Bunny tells the story of a giant rabbit with a heart bigger than himself. When one sunny day three rodents rudely harass him, something snaps... and the rabbit ain't no bunny anymore! In the typical cartoon tradition he prepares the nasty rodents a comical revenge.  Licensed under the Creative Commons Attribution license  http://www.bigbuckbunny.org
    [thumbnail_url] => http://b.vimeocdn.com/ts/209/636/20963649_1280.jpg
    [thumbnail_width] => 1280
    [thumbnail_height] => 720
    [video_id] => 1084537
)

Da einige Anbieter teilweise ihre Medien gegen das Einbinden auf fremden Webseiten schützen oder auch mal ein Medium gelöscht werden kann, müssen wir prüfen, ob beim Zugriff alles in Ordnung ist. Sollte dies nicht der Fall sein, erhalten wir im Response Header einen entsprechenden HTTP Status Code. Greifen wir auf ein geschütztes Medium zu, sähe der Inhalt von $http_response_header beispielsweise so aus:

Array
(
    [0] => HTTP/1.1 403 Forbidden
    [1] => Server: nginx
    [2] => Date: Sat, 05 May 2012 11:05:32 GMT
    [3] => Content-Type: text/html; charset=utf-8
    [4] => Connection: close
    [5] => Cache-Control: no-cache
    [6] => Access-Control-Allow-Methods: GET, PUT, POST, DELETE
    [7] => Access-Control-Allow-Headers: Accept, Authorization, Content-Type, Origin
    [8] => Access-Control-Allow-Origin: *
    [9] => X-Runtime: 36
    [10] => X-Cacheable: NO:Cache-Control=no-cache
    [11] => Content-Length: 1
    [12] => X-Varnish: 1789823721
    [13] => Age: 0
    [14] => Via: 1.1 varnish
    [15] => X-Cache: MISS
)

Die Nutzung ist nicht nur auf Videos beschränkt, sondern kann für weitere Multimedia-Formate wie Audio oder Bilder genutzt werden. Um beispielsweise den Player von SoundCloud einzubinden, müssen wir lediglich den Link abändern. Die Dokumentation liefert uns eine Beschreibung aller möglichen Parameter. Gekürztes Beispiel:

<?php

$soundcloud = 'http://soundcloud.com/oembed?format=xml&show_comments=false&url=';
$audio = 'http://soundcloud.com/beastieboys/sets/hot-sauce-committee-part-two';

$url = $soundcloud.urlencode($audio);
$daten = @simplexml_load_file($url);

echo $daten->html;

Die komplette Ausgabe:

SimpleXMLElement Object
(
    [version] => 1.0
    [type] => rich
    [provider-name] => SoundCloud
    [provider-url] => http://soundcloud.com
    [height] => 450
    [width] => 100%
    [title] => Hot Sauce Committee Part Two by Beastie Boys
    [description] => 2011 release, the long-awaited eighth album from the Hip Hop/Rock trio. Hot Sauce Committee Part Two was produced by Beastie Boys and mixed by Philippe Zdar. This album marks Mike "Mike D" Diamond, Adam "Ad Rock" Horovitz and Adam "MCA" Yauch's first full length effort since 2007's Grammy-winning all-instrumental The Mix-Up.
    [html] => <![CDATA[http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Fplaylists%2F737966&show_artwork=true]]>
)