webconsul

the best webconsul(ting)

Neu bei Google AdWords: Die +1-Schaltfläche

Sie sind hier: Startseite » entwicklung

In den kommenden Wochen werden Ihre Suchergebnisse und Anzeigen auf Google um eine +1-Schaltfläche ergänzt, mit deren Hilfe Nutzer Ihre Anzeigen weiterempfehlen können. Dafür sind keine Änderungen in Ihrem Konto erforderlich. Die URL der Zielseite Ihrer Anzeige kann zudem im Google-Profil der Nutzer erscheinen, die Ihrer Anzeige +1 geben.

Diese Nachricht kam vor ein paar Tagen per Newsletter in meine Inbox.

Wer von euch denkt, dass damit Google-Ranking kaufbar wird?
Bzw. diesmal weiterhin manipulierbar über Clickjacking, wie es bei Facebook-Fanpages schon so oft der Fall war?

Mozilla Labs – Open Web Applications

Sie sind hier: Startseite » entwicklung

In den Mozilla Labs wurde gestern der Prototyp eines Open Web App Ecosystem veröffentlicht.

Der Prototyp wird folgendermaßen beschrieben und im Video erklärt:

Meiner Meinung nach ist das eine gute Herangehensweise um die bisherigen Platzhirschen im Bereich Mobile Apps wie den iTunes Appstore, Android Marketplace und viele weitere zu attakieren und eine freie Lösung zu schaffen.
Auf der Seite der Mozilla Labs – Apps gibt es gute Beispiele und Co zu:

Was sagt ihr dazu?

Optimiere deinen Google Analytics-Code … noch ein bisschen besser

Sie sind hier: Startseite » entwicklung

Im vorherigen Artikel hatte ich bereits über die Verbesserung des Google Analytics-Code gesprochen, in der Diskussion sind aber noch ein paar kleine Verschnellerungen aufgetaucht, die in diesem Generator enthalten sind.

Der Code sieht nun folgendermaßen aus:
<script>
var _gaq=[['_setAccount','UA-XXXXX-X'],['_gat._anonymizeIp'],['_trackPageview']];
(function(d){
  var g=d.createElement('script');
  g.async=1;
  g.src='http://www.google-analytics.com/ga.js';
  d.getElementsByTagName('head')[0].appendChild(g);
  for(var i=0;i<d.getElementsByTagName('a').length;i++){
    var a=d.getElementsByTagName('a')[i];
    if(!a.getAttribute('onclick') && window.location.hostname!=a.hostname)
    a.setAttribute('onclick', "_gaq.push(['_trackEvent', 'outbound', '"+a.href+"'])");
  }
}(document))</script>

Also bitte ab sofort selbigen Code nutzen :-)


Um Deinen individuellen Tracking-Code zu erhalten, gib hier die gewünschte ID ein:

Füge diesen Code vor dem Tag </body> ein:

Mit dem deutschen Datenschutz-Feature _anonymizeIp:

Crawler für 1 Milliarde Seiten mit wget und xargs

Sie sind hier: Startseite » entwicklung

Die Jungs von XCombinator (nicht zu verwechseln mit YCombinator) haben vor einiger Zeit eine gute Analyse mit einigem Research zur ihrem eigenen Crawler veröffnetlicht:
How long would it take to crawl a billion pages using wget and xargs?

Dabei geht es um die Fragestellung:

We’re on a quest to write a scalable web crawler. Our goal is to build a web crawler that will download a billion pages a week. We’ve calculated that to download a billion pages in a week we need to sustain a rate of 1653 pages per second.

Das ist definitiv keine einfache Angelegenheit.
Mit meinem cUrl-Crawler bzw. Mischung aus PHP und wget crawle ich mir langsam mein Archiv mit 10 Seiten pro Sekunden zusammen, aber 1653 ist dann doch eine andere Anforderung, gerade auch an die Hardware dahinter.

The problem with these kinds of numbers is that, unless you are familiar with web-crawling, it is not obvious how fast that really is. How fast can a simple crawler go? 10 pages per second? A thousand?

Wen diese Frage auch interessiert: lest rein, ist ein spannender Artikel!

Dark Patterns – Wie User getäuscht werden (können)

Sie sind hier: Startseite » entwicklung

DIY: Contentklau identifizieren

Sie sind hier: Startseite » entwicklung

Seit einiger Zeit bemerke ich höhere Bot-Aktivität in meinem webconsul-Blog, weshalb ich vor einiger Zeit schon Scraperbots anhand deren User-Agents aus meinem Blog ausgeschlossen habe.

Will man aber nun Blogs/Seiten finden, die den eigenen Content übernehmen, sei es über den RSS-Feed (den man nur gekürzt ausliefern sollte) oder über Yahoo! Pipes oder was auch immer, dann kann man seine Artikel mit einem einfachen Trick in Google wiederfinden.

Dazu müsst ihr nur in eurem Theme-Verzeichnis die Artikel-Seite (index.php, page.php, article.php, single.php, …) öffnen und jeweils vor oder nach dem Aufruf von the_content() foldendes einfügen:

echo "<!-- ".md5(the_title())." -->";

Oder entsprechend mit umschließenden PHP-Tags:

<?php echo "<!-- ".md5(the_title())." -->"; ?>

Damit könnt ihr dann später nach dem jeweiligen MD5-String suchen.

md5 unique string for blog indentification

Das ist der neu eingefügte String im obig verlinkten Artikel.

Diesen tippt ihr einfach in die Google-Suche ein und falls ihr fündig werdet, wisst ihr, dass eure Content auch auf anderen Seiten publiziert wurde.

Sollte dies geschehen, solltet ihr je nach Lust und Laune einen RSS-Cloaker installieren, der je nach IP-Adresse anderen Content ausliefert. Den bösen Jungs jubelt ihr dann einfach eure SEO-Links oder Spam-Content unter, sodass sie entweder euch einen Gefallen tun oder selbst aus Google fliegen.

Be creative ;-)

PS: Ja, es gibt Möglichkeiten dies zu umgehen, aber ich will an dieser Stelle nicht erklären, wie man PHPs strip_tags() oder reguläre Ausdrücke verwendet ;-)

FTD: Free Paid Content – Wie man es NICHT macht!

Sie sind hier: Startseite » entwicklung

Der Tweet vom bösen SEO Fehler auf Financial Times Deutschland erlaubt das Lesen von kostenpflichtigen Artikeln mit dem Verweis auf den Artikel Fehler auf Financial Times Deutschland von Sebastian Klipper hat mich dazu inspiriert einen FTD Free Paid Content Redirect zu schreiben:

FTD Free Content Redirect:

<?php
  $url = str_ireplace('www', 'm', $_GET['s']);
  header("Location: $url?mode=simple");
?>

Die Quintessenz des Skripts ist oben dargestellt, in meinem Code ist etwas mehr (Sicherheit + Styling) drin, wird aber nicht benötigt.

Über diesen Link könnt ihr also Artikel kostenfrei aufrufen, indem ihr einfach die originale Artikel-URL einfügt und danach weitergeleitet werdet.

Dies ist ein wunderschönes Beispiel, warum clientseitige Redirects bzw. Sicherheitschecks nicht funktionieren.
Auf der User-Seite kann man eben alles modifizieren, schließlich ist es mein Rechner der den Inhalt kontrolliert.

Also liebe Admins von FTD, lest diesen Beitrag und passt daraufhin eure Umleitung anhand der Browser-Identifikation an.

Liebe Leser: sollte die Umleitung von FTD serverseitig gelöst werden, dann stellt einfach euren User-Agent um und kommt trotzdem an der wertvollen Inhalt ;-)

Also liebe Admins: solltet ihr zuviele kostenfreie Zugriffe erhalten, baut einen Login/Cookie vor euren Paid Content und zwingt somit alle Leser zum Kauf eurer Inhalte.

UPDATE: Der ursprüngliche Fund stammt von Marko Rogge.

Let’s Spam XING – oder wie man XING als Referrerspam missbrauchen kann

Sie sind hier: Startseite » entwicklung

Heute Morgen bin ich über einen Tweet auf eine interessant Meldung von Franz Neumeier gestoßen.
Dieser ist wie ich auf XING angemeldet und schrieb den Artikel Kreative Spam-Idee in XING.

Lest euch den Artikel durch, sodass ihr wisst, was mit folgendem Skript erreicht werden soll:
<?php

$names = [...]; // Array, Datenbank, Namensbuch, ...

for($i=0; $i<sizeof($names); $i++) {
   $site = 'http://www.myspammysite.info/?who='.$names[$i];
   $url = 'https://www.xing.com/profile/'.$names[$i];

   $c = curl_init($url);
   curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; ...) Gecko/20061204 Firefox/2.0.0.1");
   curl_setopt($c, CURLOPT_REFERER, $site);
   curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($c, CURLOPT_HEADER, 0);
   curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
   $r = curl_exec($c);
}
?>

Damit funktioniert die ganze Technik schon.
Über $names werden alle Namen geladen und im Schema Vorname_Nachname zusammengefügt und dann einfach über eine Schleife der Reihe nach geladen.
$site wird dabei immer auf den gewünschten Referrer gesetzt, sodass man seine Werbeseiten dort unterbringen kann.

Wie man das Skript genau modizifiert, dass es dem XING-System nicht auffällt und ihr unter dem Radar fliegen könntet, solltet ihr euch selbst überlegen.

Gerade da XING eine intelligente Zielgruppe anspricht, sollte man nicht unbedingt mit nackten Frauen oder Casinos Werbung machen, sondern vielleicht mit XY… ;-)

Auf jeden Fall ist es eine kreative Idee, die hier als Proof-Of-Concept dargestellt werden sollte.

Als XING-User kann man nichts dagegen unternehmen, XING selbst könnte allerdings solche Aufrufe erkennen und unterbinden.

Die Lesebestätigung deines CVs

Sie sind hier: Startseite » entwicklung

Soeben habe ich eine längeren Kommentar in Marcus Artikel Die Lebenslauf Lesebestätigung hinterlassen.
Der Hintergrund ist, dass ein Typ einen CSS-Trick verwendet um an die Bestätigung zu kommen (siehe: A Naughty CV Trick).
Aber da ich persönlich das Stylesheet in solch einem Fall sicher in das HTML selbst einbetten würde, da ich keinerlei Risiko eingehen möchte, dass der Lebenslauf nur wegen einer Lesebestätigung beschissen aussieht, bin ich auf folgende Lösung gestoßen.

Der Artikel oben hat mich inspiriert dieses Skript als Proof-of-Concept zu erstellen und euch will ich das nicht vorenthalten.

Baut am Ende der HTML-Datei einfach folgenden Code ein:

<script type="text/javascript">
var i = document.createElement('img').
i.src = 'http://www.webconsul.de/cv.php?u=mcd';
i.style.display = 'none';
document.body.appendChild(i);
</script>
<noscript>
<img src='http://www.webconsul.de/cv.php?u=mcd' height="3" width="4" style="display:none" />
</noscript>

Dies führt dazu, dass ein Bild mit dem Parameter u für Unternehmen zu Deinem serverseitgen Skript übermittelt wird.
Diesen kann man dann je nach Bewerbung/Unternehmen anpassen und man ist flexibel in der Herkunft.
Das erübrigt dann auch die Datenschutzdebatte ;-)

Es geht auch wahlweise nur letzterer IMG-Tag mit einem Bild, dass nur 3x4px groß ist und somit bei keiner Konnektivität gar nicht auffällt:
<img src=’http://www.webconsul.de/cv.php?u=mcd’ height=”3″ width=”4″ style=”display:none” />

Über den CSS-Style display:none wird es in den meisten Browsern auch nicht angezeigt, d.h. auch ein aufmerksamer Personaler, der den Quellcode nicht überprüft, wird dieses Bild nicht finden.
Die Angaben von 3×4 Pixel ist eher ungewöhnlich, aber 1×1 würde ich nicht verwenden, da viele Corporate Firewalls die 1×1 großen Tracking-Bildchen ausblenden und in solch einen Filter wollen wir ja schließlich nicht gelangen.

Jetzt brauchen wir nur noch unser serverseitiges PHP-Skript, welches auf dem obig eingebundenen Pfad liegt.
Der Inhalt kann so aussehen:

<?php
$u = $_GET['u']; // der uebergebene Unternehmensstring
$d = date("d.m.Y - G:i");
header("Content-type: image/jpg");
$f = fopen('aufrufe.csv', 'a');
fwrite($f, "$u;$d;\n");
fclose($f);
mail('peter@webconsul.de', , "Alert: CV-Aufruf von $u", "Unternehmen: $u\nAufruf um: $d\n");
?>

Wichtig ist hierbei, dass der Elementtyp Content-type mit image/jpg ausgeliefert wird und der Browser deswegen nicht meckert.
Ansonsten ist der Inhalt relativ flexibel gestaltbar, in obigem Beispiel sicher er die jeweiligen Aufrufe in eine .csv-Datei namens aufrufe.csv und sendet einen Alert per Mail.

Die eMail wird in aller Kürze verfasst, geht an meine Mailadresse und beinhaltet im Betreff schon das Unternehmen und im eMail-Content nochmals das Datum.
Somit sollten keine wichtigen Informationen verloren gehen und datenschutzkonform dürfte es auch sein, da keinerlei Nutzungsdaten wie IP, Name oder ähnliches gespeichert werden.

Je nach Anwendungszweck kann man das Skript oben ja noch ein wenig anpassen, da es sich auch wunderbar als Lesebestätigung für einen Newsletter, Mailingliste, und vieles mehr eignet.

Also seid kreativ und macht mehr daraus :-)

Beste Grüße und viel Spaß!

18 Millionen Nutzerprofile – powered by Google

Sie sind hier: Startseite » entwicklung

Will man in vielen Blogs, sozialen Community und dem ganzen Rest eindeutige Profile anlegen um den jeweiligen Seitenbetreiber und/oder Spam-System nicht aufzufallen, so braucht man Input. Viel Input.

Den beschafft man sich am besten einfach über Google selbst, indem man die Google Profile dazu nutzt.

Vor einiger Zeit konnte man über die Suchanfrage inurl:http://www.gstatic.com/s2/sitemaps/sitemap entsprechend 3449 Sitemaps mit je 5000 Profilen finden.
Gut, die Nummerierung ist relativ simpel und mit einem kleinen Skript kann man alle Sitemaps runterladen:
for($i=100; $i<3450; $i++)
system("wget http://www.gstatic.com/s2/sitemaps/sitemap-".$i.".txt");

Und dann die jeweiligen Sitemaps durchlaufen und die jeweiligen Profile mit diesem Skript:

for($i=2000; $i<3000; $i++) {
$file = fopen("../sitemap-$i.txt", "r") or exit("Unable to open file!");
system("mkdir profiles-$i");
while(!feof($file)) {
$random = rand(2,10);
$id = split('/', fgets($file));
$id = $id[4];
echo "fetching $id";
system("sh ../wget.sh $i $id");
sleep($random);
}
fclose($file);
}

Und wget.sh dann mit eigenem User-Agent und Parametern konfiguriert gibt am Ende 3499*5000 = 17.245.000 Google Profile.

Damit kann man sich ein schönes User-Netzwerk aufbauen, Blogs einrichten und vieles mehr.

Aber dabei sollte natürlich nie gegen die jeweiligen Richtlinien der Betreiber verstoßen werden.