Zurück

Cloudflare E-Mail Protection – Mehr Schein als Sein

20.08.2013 20:07 von Samuel

Was ist Cloudflare?

Hier eine Kurze Beschreibung was überhaupt Cloudflare ist.

CloudFlare ist ein dezentral aufgestelltes Content Delivery Network mit anhängigem DNS. Es werden Server in 23 Rechenzentren in 14 Ländern verteilt betrieben.
Michelle Zatlyn, Lee Holloway und der aktuelle CEO Matthew Prince entwickelten CloudFlare 2009, der offizielle Start wurde im September 2010 auf der TechCrunch Disrupt Conference verkündet.[1] Im Jahr 2010 wurden rund 150 Millionen Interaktionen einzelner Benutzer bei 5 Milliarden Seitenabrufen pro Monat [2]. Der Dienst sicherte Anfang 2012 etwa 250.000 Websites beispielsweise gegen Nachfragespitzen ab.[3] Im März 2013 wurde mehr als das Dreifache, rund 780.000 Seiten, als aktueller Stand genannt.

@Quelle: Wikipedia

 

Cloudflare bietet nebenbei auch eine E-Mail-Protection an. Damit werden E-Mail Adressen auf der Webseite mit Javascript entschlüsselt. Das heisst, die Adresse wird nicht in Klartext im Quelltext zu sehen sein, sondern nur verschlüsselt und wird dannach durch eine Javascript Funktion entschlüsselt. Dies hat der Vorteil, dass die E-Mail Adresse erst angezeigt wird, sobald der Benutzer Javascript aktiviert hat. Jedoch hat dies nicht nur Vorteile sondern auch einen grossen Nachteil. Der Benutzer wird gezwungen Javascript zu aktivieren falls er die E-Mail Adresse sehen möchte um Kontakt aufzunehmen.

 

Cloudflare selber erklärt ihre Dienstleistung so:

How does CloudFlare protect email addresses?
CloudFlare protects email addresses on your site by encrypting the email address in the source code. By doing so, this stops malicious bots from harvesting the email address and as a result, the bot cannot send spam to the email address. To humans, the email displays normal. It is only encrypted in the source code. With this functionality, you no longer have to use solutions like writing out email addresses (i.e. help [at] cloudflare [dot] com) or using graphics.
We have designed this so it doesn’t break anything on your site, but if it does, you can turn it off through your CloudFlare Settings Page and by selecting “off” for Email Address Obfuscation (Your Websites –> Settings –> CloudFlare settings)
For more information, visit the wiki here: /wiki/Email_Address_Obfuscation.

 

Wenn wir uns nun eine Seite ansehen die durch Cloudflares E-Mail-Protection geschützt ist, bekommen wir nur dies zu sehen:

[email protected]

 

Der Code dahinter sieht so aus (formatiert):

<span class="__cf_email__" data-cfemail="44322a212921302c3d0437262723282b2625286a2a2130">[email&nbsp;protected]</span><script type="text/javascript">

/* <![CDATA[ */
(function(){try{

var s,a,i,j,r,c,l,b=document.getElementsByTagName("script");
l = b[b.length-1].previousSibling;
a = l.getAttribute('data-cfemail');

if(a){
  s = '';
  r = parseInt(a.substr(0,2),16);

  for(j=2;a.length-j;j+=2){
    c = parseInt(a.substr(j,2),16)^r;
    s += String.fromCharCode(c);
  }

  s = document.createTextNode(s);

  l.parentNode.replaceChild(s,l);
}

}catch(e){}})();
/* ]]> */
</script>

 

Der Code ist ein Durcheinander. Aber das ist ja auch der Sinn dahinter. Der verschlüsselte String von Cloudflare sehen wir nun bei “data-cfemail”. Anhand der unten stehenden Funktion kann nun die Adresse entschlüsselt werden.

Ich habe nun versucht den Code in PHP umzuschreiben, damit man kein Javascript benötigt um die E-Mail Adresse zu entschlüsseln. Da der Code von Cloudflare eben doch mehr Schein als Sein ist, war dies ein Kinderspiel.

Eigentlich muss man den Code nur so abschreiben, einige unnötige Funktionen entfernen und die Javascript Funktionen mit den PHP-Funktionen ersetzen.

 

Aus “parseInt” wird “hexdec” (Hexadezimal zu Dezimal Umwandlung) (PHP Doku)

Aus “fromCharCode” wird “chr” (Gibt ein einzelnes Zeichen zurück) (PHP Doku)

 

Jetzt das Ganze noch in richtigen PHP Code schreiben und dann kann das so aussehen:

function decryptCloudflare($email) {
    $decrypted = '';

    $r = hexdec(substr($email, 0, 2));
    $s = '';

    for($i = 2; strlen($email) - $i; $i += 2) {
      $c = hexdec(substr($email, $i, 2))^$r;
      $s .= chr($c);
    }

    return $s;
  }

 

Ein Aufruf:

echo 'Decrypted: '.decryptCloudflare('44322a212921302c3d0437262723282b2625286a2a2130');

Fazit

Wie bereits erwähnt ist das mehr Schein als Sein. Hinter dieser “E-Mail Protection” wie sie Cloudflare nennt, steckt nicht wirklich viel Arbeit dahinter und ist auch nicht sonderlich gut durchdacht. Vielleicht sollte man doch wieder auf die alte Methode zurückgreifen und E-Mail Adressen beispielsweise so schreiben: kontakt [at] meinedomain.ch. Vorteilhaft wäre natürlich gar keine Adresse anzugeben und die Nachricht via Formular abzuschicken. Wer seine E-Mail Adresse also vor Webcrawlern schützen möchte, ist bei Cloudflare bestimmt an der falschen Stelle :-)

Zurück

Einen Kommentar schreiben