# Mach mit! Spamme mit! [Knacknuss]

## STiGMaTa_ch

Bevor ihr jetzt bei den MOD's Alarm schlagt...

in Ruhe weiterlesen

Da meine armen Hirnwindungen mittlerweile vollkommen ausgelastet sind, will ich über diesen Weg mal den Gentoo-Brain-Cluster (TM) aktivieren  :Laughing: 

Es geht um folgendes Problem:

Man nehme eine Website, schreibe irgend einen blah, blah rein und irgendwo postiere man einige Mailadressen darin:

```
<HTML>

...

<A HREF="mailto:mickey.mouse@entenhausen.eh">mickey.mouse@enthenhausen.eh</A><BR>

<A HREF="mailto:donald.duck@entenhausen.eh">donald.duck@enthenhausen.eh</A><BR>

...

</HTML>
```

Wenn nun ein "pöser Spammer (TM)" die Seite z.B. mit wget herunterlädt kann er mit einigen simplen RegEx's die Mailadressen zu seinem "pösen Spammer Mailpool (TM)" hinzufügen. Das will unsereins natürlich verhindern, möchte dem User aber die Flexibilität eines solchen Links nicht nehmen.

Das bedeutet:

- Ersetzen der Mailadresse durch ein Bild ist doof da gerade bei langen & komplizierten Mails alles mühsam abgetippt werden muss.

- Verschandeln der Mailadresse (z.B. mickey [dot] mouse [at] entenhausen [dot] eh) ist doof weil links dann nicht mehr direkt anklickbar sind.

- Verwendung von Javascript oder Cookies um die Mailadresse(n) einzupflanzen ist doof weil heutzutage mit all den voreiligen PersonallFirewall's und Virensuites irgendwer sicherlich KEINE Mailadresse angezeigt bekommt.

Die bisher beste Lösung die ich für dieses Problem gefunden habe ist folgende:

Jeder Buchstabe der Mailadresse wird entweder als normales Zeichen (Möglichkeit 1), als HTML Hex Code (Möglichkeit 2) oder als URL encoded (Möglichkeit 3) Zeichen dargestellt. Die Verwendung der einzelnen Möglichkeiten erfolgt (mehr oder weniger) willkürlich. Für mickey mouse würde das Resultat dann z.b. so aussehen:

```
<HTML>

...

<a href="mailto:%6d%69c%6bey.%6dous&#101@e%6e%74e&#110%68&#097%75sen%2ee%68">mickey.mouse@entenhausen.eh</a>

...

</HTML>
```

Achtung! Die Adresse zwischen <a> und </a> wird hier direkt als korrekter TEXT dargestellt. Schaut den Source dieser Seite an um zu sehen, dass dieser eigentlich aus einem Gemisch aus HTML Hex Codes und normalen Zeichen besteht<

Zum Test könnt Ihr euch den Code einfach mal in ein leeres html pasten und ausprobieren. Der Vorteil vom ganzen ist der, dass die Mailadresse anklickbar bleibt, dem Mailclient normal übergeben werden kann und trotzdem vor RegEx'es versteckt bleiben kann.

Die Frage die sich mir nun stellt:

Ist das ganze wirklich vor RegEx's sicher? Kann man damit ein Scan Programm wirklich täuschen oder ist es mit einem simplen Script ganz einfach möglich die Mails aus dem Source zu extrahieren?

Hier also der Aufruf:

Wer hat Lust anhand einer Beispiel Website die Mailadressen mittels Script herauszuholen? Oder kann jemand sachdienliche Hinweise liefern, welche aufzeigen, dass das ganze nicht funktionieren kann?

P.s. Die Beispiel Website ist ebenfalls ein schönes Beispiel, weil Lycos einfach VOR und NACH meinem HTML Text noch Werbemüll und Scripts knallt.

P.s.2. ich selber werde mich am Weekend ebenfalls dem Problem widmen (Man soll mir nicht nachsagen, ich lasse andere für mich arbeiten   :Twisted Evil:  ).

Lieber Gruss

STiGMaTa

----------

## Hilefoks

 *STiGMaTa_ch wrote:*   

> Die Frage die sich mir nun stellt:
> 
> Ist das ganze wirklich vor RegEx's sicher? Kann man damit ein Scan Programm wirklich täuschen oder ist es mit einem simplen Script ganz einfach möglich die Mails aus dem Source zu extrahieren?

 

Das ist ja nur "Security through Obscurity". Es kann durchaus sein das im Moment eine solche Adresse weniger Spammer finden, aber es sollte ein leichtes sein sein Script an diese gegebenheit anzupassen. Als Spammer würde ich obendrein eh alle <a href="mailto:foo">bar</a> catchen. Ist mir als Spammer doch egal ob ich dann die ein oder andere ungültige Adresse erhalte.

MfG Hilefoks

----------

## STiGMaTa_ch

 *Hilefoks wrote:*   

>  *STiGMaTa_ch wrote:*   Die Frage die sich mir nun stellt:
> 
> Ist das ganze wirklich vor RegEx's sicher? Kann man damit ein Scan Programm wirklich täuschen oder ist es mit einem simplen Script ganz einfach möglich die Mails aus dem Source zu extrahieren? 
> 
> Das ist ja nur "Security through Obscurity". Es kann durchaus sein das im Moment eine solche Adresse weniger Spammer finden, aber es sollte ein leichtes sein sein Script an diese gegebenheit anzupassen. Als Spammer würde ich obendrein eh alle <a href="mailto:foo">bar</a> catchen. Ist mir als Spammer doch egal ob ich dann die ein oder andere ungültige Adresse erhalte.
> ...

 

Dann scanne doch mal meine Beispielseite nach <a href="mailto:foo">bar</a> ich denke, da wirst du schonmal keine Freude daran haben  :Wink: 

Und ob es wirklich "einfach" ist die Adresse rauszufischen möchte ich ja gerade mit diesem Experiment herausfinden. Die paar Gedankenspiele dich ich bisher getrieben haben, konnten dem ganzen standhalten (aber was soll das schon heissen). Am Weekend nehme ich mir die Zeit selber mal ein wenig mit grep, awk und co rumzuspielen.

Vielleicht hat hier aber ja schon jemand die Thematik beleuchtet und kann sagen... "Ist die Mühe nicht Wert..., so und so und so kommt man an deine Adressen". Dann hätte ich wenigstens Gewissheit, dass es nicht wirklich taugt.

Lieber Gruss

STiGMaTa

----------

## Moorenkopf

Hast du schon 'nen Algorithmus um solchen HTML-Code zu erzeugen, oder machste das bisher von Hand?

Gruß Stefan

----------

## Anarcho

Kein Problem!

mailscanner.pl:

```
#!/usr/bin/perl -w

use strict;

use HTML::Entities;

sub URLDecode {

    my $theURL = $_[0];

    $theURL =~ tr/+/ /;

    $theURL =~ s/%([a-fA-F0-9]{2,2})/chr(hex($1))/eg;

    $theURL =~ s/<!--(.|\n)*-->//g;

    return $theURL;

}

my $line;

my @mails;

while(<>) {

        $line = decode_entities($_);

        $line = URLDecode($line);

        if ($line =~ /mailto/) {

                @mails = $line =~ /(\w[\w|\.|\-]*@\w[\w|\.|\-]+\.[a-zA-Z]{2,4})/xg;

                print join("\n",@mails)."\n";

        }

}
```

Run:

```
workstation perl $ wget http://mitglied.lycos.de/stiggichaos/gentooforum/gentoo-spamtest.html -O - 2>/dev/null | ./mailscanner.pl

harry.potter@hogwarts.eu

mmouse@entenhausen.eh

gentoo@gentoo.org

gentoo@gentoo.org

private@privacy.org
```

Ich persönlich finde dennoch die JavaScript-Lösung am besten. Dazu müssten die Jungs dann nämlich eine JavaScript Engine einbauen. Und die allermeisten dürften mit solch simplen Scripten auch keine Probleme mehr haben.

----------

## think4urs11

ohne das ich das jetzt ausprobiert hätte, aber ...

würde es nicht genügen

a) 'a href=' aus der Seite herauszufiltern und den überflüssigen Schnickschnack abschneiden

d.h. es bleibt nur übrig was zwischen '"' steht

b) UTF-encoded in lesbar umzuwandeln (s/([\xC0-\xDF])([\x80-\xBF])/chr(ord($1)<<6&0xC0|ord($2)&0x3F)/eg;)

danach sollte der String nur noch hex-codierte Zeichen enthalten

c) hex encoded in lesbar umzuwandeln (s/%([A-Fa-f\d]{2})/chr hex $1/eg;)

Sollte doch am Ende eine sauber lesbare RFC822-konforme Mailadresse rausfallen oder übersehe ich etwas?

*edit* Anarcho war schneller  :Smile: 

----------

## Anarcho

 *Think4UrS11 wrote:*   

> ohne das ich das jetzt ausprobiert hätte, aber ...
> 
> würde es nicht genügen
> 
> a) 'a href=' aus der Seite herauszufiltern und den überflüssigen Schnickschnack abschneiden
> ...

 

Nein, das siehst du komplett richtig, siehe meine kleines 5-min Script. Letzendlich kann man es nicht wirklich vor einem Scanner verstecken, egal wie encodiert, ausser man verwendet Techniken die der Scanner nicht kann und da sehe ich die meisten Chancen (noch) mit JavaScript.

----------

## monade

Das hier:

http://w2.syronex.com/jmr/safemailto/de/

benutze ich für Mailadressen auf meiner Webseite.

----------

## Knieper

 *monade wrote:*   

> Das hier:
> 
> http://w2.syronex.com/jmr/safemailto/de/
> 
> benutze ich für Mailadressen auf meiner Webseite.

 

Hat aber mehrere Nachteile. Angefangen bei Barrierefreiheit, weiter bei Nutzbarkeit (mein Browser kann zB. kein mailto - JS "verhindert" Kopieren der Adresse) und Anwenderfreundlichkeit (Wer tippt gern Captchas ab?).

----------

## monade

 *Knieper wrote:*   

> Hat aber mehrere Nachteile. Angefangen bei Barrierefreiheit, weiter bei Nutzbarkeit (mein Browser kann zB. kein mailto - JS "verhindert" Kopieren der Adresse) und Anwenderfreundlichkeit (Wer tippt gern Captchas ab?).

 

Es gibt eine Version mit und eine ohne Captchas - ich verwende die ohne. Klar, es ist ein Abwägen zwischen Barrierefreiheit/Nutzbarkeit und Spamschutz. Eine Möglichkeit ist, dass man als "Fallback" zusätzlich die Mailadresse als Bild darstellt (wobei das auch nicht barrierefrei ist, oder?).

----------

## sirro

 *STiGMaTa_ch wrote:*   

> Oder kann jemand sachdienliche Hinweise liefern, welche aufzeigen, dass das ganze nicht funktionieren kann?

 

Ich. Mache das schon laenger (hex-codes) und bekomme trotzdem Spam auf die Adresse (die damals neu war). Ob es jetzt an Adressen-raten oder an der dekodierung liegt kann ich nicht sagen, aber ich tippe mal, dass manche auch an sowas gedacht haben.

Ich glaube aber, dass es deutlich weniger Spam ist als vorher (placebo?  :Wink: ). Und das ist ja auch schon mal was.

----------

## l3u

Also ich hab folgendes Script in Gebrauch: http://www.nasauber.de/sandkasten/email_encoder.php damit "verschlüssele" ich die eMail-Adressen in meinem Gästebuch und Weblog. Kein Link, nur Text. Am besten verpackt in ein acronym, dann wird das glaub ich kein Spammer parsen.

----------

## Anarcho

So, dann will ich auch mal:

http://anarcho.dyndns.org/test.php

EDIT: @Libby:

```
workstation perl $ echo 'Zur Kontrolle: test&nbsp;at&nbsp;test&nbsp;.&nbsp;de' | ./mailscanner.pl

Zur Kontrolle: test�at�test�.�de
```

Nur die &nbsp; bringen natürlich auf der Console nicht viel...

Und man kann es nicht anklicken...

----------

## slick

Der gute slick hat sich was anderes dazu einfallen lassen. Da er seine Mail-Accounts in einer mysql verwaltet kann er z.B. mit php dynamisch gültige Adressen on-the-fly erzeugen und auch wieder löschen. D.h. Besucher besucht Website -> E-Mail wird anhand Timestamp und IP generiert -> Adresse wird als gültige Mailadresse in mysql geschrieben -> User hat 6 Stunden Zeit auf diese Adresse zu schreiben, danach wird sie wieder aus der mysql gelöscht.

Fazit: Spammer müßte Seite besuchen, Mail extrahieren und dann innerhalb von 6 Stunden schreiben -> hat bisher keiner geschafft. 

Interessant ist auch das man damit (zusammen mit den Webserverlogs) nachvollziehen kann wann die Adresse (mit welcher Browserkennung usw.) gesammelt wurde und so kann ich heute immernoch in den Maillogs (vergebliche) Mails an eine Adresse finden die mal vor Monaten auf der Website "aufgelesen" wurde. Die muß dann wohl auf dutzenden Spam-Verteilern gelandet sein.

"Live-Demo":  www.deruwe.de/kontakt.html

----------

## think4urs11

und noch ein bischen eleganter (weil ohne mysql) als slick das macht macht es der gute docsynder (regelmäßigen Lesern der Heise-Foren sicher ein Begriff) -> Wegwerf DNS-Subdomains

Jemand etwas noch eleganteres auf Lager?

----------

## dakjo

Briefpost.

----------

## think4urs11

 *dakjo wrote:*   

> Briefpost.

 

elegant != historisch wertvoll  :Wink: 

Es geht hier doch um Lösungen ohne Medienbruch.

@slick:

Weil mir das gerade so in den Sinn kam... was passiert eigentlich wenn $pöserSpammer auf die Idee kommt und deine Kontaktseite ein bischen ärgert?

Wann läuft dir deine DB über?   :Twisted Evil: 

----------

## Anarcho

Nach dem Motto:

```
while true; do wget http://www.deruwe.de/kontakt.html -O - > /dev/null; sleep 1; done
```

Das wären dann 60 Mailadressen pro Minute, also 3600 pro Stunde, also 21600 alle 6 Stunden.

Und wenn man das sleep weglässt schafft man vielleicht 10x soviele Abrufe. (vielleicht aber auch mehr...)

Über 200.000 Mailadressen in der Datenbank...autsch.

Es mag zwar wirkungsvoll sein, aber dafür muss derjenige der dir schreibt immer an so blöde Emailadressen schreiben...

Immerhin ist es ein direkter link.

Und die Lösung mit den temporary subdomains wäre mir zu umständlich. Es macht wahrscheinlich mehr Arbeit die ganzen Einstellungen zu ändern (inklusive diverser foren usw. als die spammails die SA durchlässt zu löschen. Da würde ich slicks Lösung bevorzugen. Wobei ich meine JavaScript-Lösung hinreichend finde.

----------

## STiGMaTa_ch

Jungs Ihr seid einfach genial!

Das musste mal erwähnt werden  :Smile: 

@Moorenkopf

 *Moorenkopf wrote:*   

> Hast du schon 'nen Algorithmus um solchen HTML-Code zu erzeugen[...]

 

Nein, ich habe die Tools der Webiste http://rumkin.com/tools/mailto_encoder/custom.php benutzt.

@Anarcho

Vielen herzlichen Dank für dein 5min Script. Ich war sehr überrascht, dass das so einfach zu lösen ist.  :Sad: 

Ich hatte mich so sehr auf das rausgreppen in "encodiertem" Zustand fixiert, dass ich gar nicht daran gedacht habe zuerst alles zu decodieren und dann das durchzugreppen   :Embarassed: 

Dein test.php finde ich klasse! Allerdings verstehe ich nicht wirklich was das Ding (resp. der daraus generierte JavaScript Code) genau macht. Kannst du dazu etwas sagen? Wäre es möglich das test.php zu posten?

@sirro

Danke für deinen Tatsachen Bericht  :Wink:  Wenn man den Artikel unter http://news.bbc.co.uk/2/hi/technology/2969783.stm liest, dann könnte man schon glauben, dass es funktioniert. Allerdings ist der selbige bereits 3 Jahre alt...

 *Quote:*   

> [...]Another successful evasion technique is to replace the characters in an e-mail address with the HTML equivalent.
> 
> None of the project's addresses written in human-readable formats or HTML received a single piece of spam. [...]

 

@Libby

Kannst du (oder jemand anderer) mir erklären warum das "in Worte" schreiben der Mailadresse sicherer sein soll?

@slick

Auch ein Interessanter Ansatz. Vielen Dank dafür! Aber ich denke, dass diese Methode wohl nur für einen privaten Anwender geeignet ist. Auf einer Firemseite wäre mir eine Mailadresse im Stil 123bjh4578zy@firma.ch irgendwie suspekt   :Rolling Eyes: 

@Think4UrS11

Danke für den "Wegwerf DNS-Dubdomain" Link. Ist auch ein wirklich Interessanter Ansatz.

@dakjo

Briefpost ... ist aber nicht anklickbar  :Laughing: 

Lieber Gruss

STiGMaTa

----------

## dakjo

 *STiGMaTa_ch wrote:*   

> ....
> 
> @dakjo
> 
> Briefpost ... ist aber nicht anklickbar 
> ...

 

Dafür aber anfassbar, aufreis und durchreisbar.

----------

## Anarcho

Also ich muss sagen das mir die Briefwerbung mehr auf den Sack geht als Spam-Mails.

Zu meiner test.php:

Im prinzip ist es ganz einfach:

Ich erstelle mir einen zufälligen String gleicher Länge (mit der Funktion codiere ich ja den ganzen <a href=...>..</a> String und nicht nur die Mailadresse).

Dann verknüpfe ich den originalstring mittels XOR mit dem zufälligen String. Die enstehenden Integerrepresentationen der ASCII Werte knüpfe ich per Punkte aneinandern. Genauso stelle ich den zufälligen String dar (der ja der "Schlüssel" ist).

Dann erstelle ich noch einen zufälligen HASH der als Variablenname dient damit das ganze schwieriger zu parsen ist (naja, nicht viel schwieriger, aber es ändert sich halt).

Aus diesen beiden Werten wird dann ein JavaScript gebastelt welches das XOR nochmals anwendet um somit den originalen Text wiederherzustellen. Dieser wird dann direkt per JavaScript ins Dokument geschrieben.

Im Originaldokument taucht dann nur der Javascriptcode mit wüsten Zahlenkollonen auf. Wenn also ein Spamscanner eine Mailadresse dort finden möchte muss er erstmal jeden JavaScriptcode ausführen und dann das Ergebnis untersuchen. Wenn aber jeder Spambot jedes JavaScript auf jeder Seite durchsuchen muss, dann viel spass!

Ich werde die Funktion posten wenn ich wieder zuhause bin.

----------

## slick

 *Think4UrS11 wrote:*   

> @slick:
> 
> Weil mir das gerade so in den Sinn kam... was passiert eigentlich wenn $pöserSpammer auf die Idee kommt und deine Kontaktseite ein bischen ärgert?
> 
> Wann läuft dir deine DB über?  

 

 *Anarcho wrote:*   

> ...Das wären dann 60 Mailadressen pro Minute, also 3600 pro Stunde, also 21600 alle 6 Stunden. ...

 

Ach Gottchen... nun habt euch doch nicht so.  :Wink:  Ja, ok, dieses Problem hatte ich nicht bedacht (Danke für den Tipp!), aber was spricht dagegen pro anfragende IP einen "Cache" von 1h oder so einzubauen. Damit wäre zumindest dieses Problemchen aus der Welt  :Wink: 

 *Think4UrS11 wrote:*   

> Wegwerf DNS-Subdomains 
> 
> Jemand etwas noch eleganteres auf Lager?

 

Solange man über einen eigenen Mailserver verfügt und die Domain mit Wildcards im DNS steht sollte es ja kein Problem sein meine genannte Lösung auf Subdomain-Adressen umzubauen. Also bei mir würde das ohne größeren Aufwand möglich sein spamtrap@expires-200609.domain.de aufzusetzen, ist ja letzendlich nur ein etwas anderer Eintrag in der Mysql.

Edith sagt noch: Javascriptlösungen sind meiner bescheidenen Meinung nach Sch...! Die funktionierenden ja "nur" bei Browser die das können und auch aktiviert haben. (Wobei man jetzt sicher eine längere Diskussion über das Für und Wieder aufmachen könnte.) Letzendlich bleibt die beste Alternative denke ich ein Mailformular, sodenn es denn sicher implementiert ist und ggf. durch ein Captcha geschützt ist. (Ja, auch bei Captcha muss der Browser wieder Bilder darstellen können usw., ich weiß...)

----------

## slick

 *STiGMaTa_ch wrote:*   

> @slick
> 
> Auch ein Interessanter Ansatz. Vielen Dank dafür! Aber ich denke, dass diese Methode wohl nur für einen privaten Anwender geeignet ist. Auf einer Firemseite wäre mir eine Mailadresse im Stil 123bjh4578zy@firma.ch irgendwie suspekt  

 

Ich sags mal so... bei mir ist die Adresse konzeptbedingt in diesem Format. Du könntest natürlich z.B. eine vorlaufende Nummer vergeben z.B. kontakt-123@domain.de, kontakt-124@domain.de , kontakt-125@domain.de. Das macht im erstem Moment anscheinend keinen Sinn aus Sicht des Spamschutz da der Spammer nur hochzählen braucht, aber wenn man bedenkt das der User erstmal die Seite aufrufen muß um die Adresse zu erzeugen, ist sie nur vorhersagbar wenn man die Anzahl der Besucher der jeweilen Seite abschätzen kann. Auch kann man ja zufällig verschiedene Prefixe auswählen, was die Wahrscheinlichkeit des Erratens auf nahezu null bringt. z.B. kontakt-$$$@domain.de, mail-$$$@domain.de, kunde-$$$@domain.de ... usw. Und sicherlich sind noch andere "besser aussehende" Muster denkbar.

Nachteil an der ganzen Geschichte ist, da der Beantworter der Mail nicht ständig sein Mail-Client neu einrichten kann wird er mit seiner "Original"-Adresse als Absender antworten, somit braucht der Spammer nur geschicktes Social-Engineering betreiben um eine Antwort zu erschleichen und hat dann eine "dauerhaft" gültige Adresse.

----------

## mkr

Die Idee mit den dynamischen Adressen lässt sich auch auf Situationen anwenden, bei denen man eine gültige Adresse angeben muss, zB. bei der Bestellung in einem Onlineshop. Dafür erzeuge ich jeweils Adressen wie "shop_x_01.09.06@domain.tld". Die Adressen bleiben dann bis auf weiteres gültig.

Wenn ich an eine solche Adresse mal Spam von Drittfirma Y bekomme weiss ich, wer die Adresse verkauft hat.

----------

## Rene-dev

http://de.wikipedia.org/wiki/Hashcash

eigentlich ein recht guter ansatz, aber leider nicht weit verbreitet.

rene

----------

## think4urs11

 *slick wrote:*   

>  *Think4UrS11 wrote:*   @slick:
> 
> Weil mir das gerade so in den Sinn kam... was passiert eigentlich wenn $pöserSpammer auf die Idee kommt und deine Kontaktseite ein bischen ärgert?
> 
> Wann läuft dir deine DB über?   
> ...

 

Nö nicht wirklich.

Nachdem die meisten Provider keinerlei Ingress-Filtering betreiben ist es ein leichtes deine DB zu fluten. Und selbst wenn man zufällig einen ISP hat der ingress filtert - nimmt man sich eben eine Liste von open proxies, ein Botnetz oder tor oder oder oder - Demonstration gefällig?   :Twisted Evil: 

----------

## sirro

 *STiGMaTa_ch wrote:*   

> @sirro
> 
> Danke für deinen Tatsachen Bericht  Wenn man den Artikel unter http://news.bbc.co.uk/2/hi/technology/2969783.stm liest, dann könnte man schon glauben, dass es funktioniert. Allerdings ist der selbige bereits 3 Jahre alt...

 

Spammer lesen sicher auch solche Berichte  :Wink: 

----------

## slick

 *Think4UrS11 wrote:*   

> Nö nicht wirklich. 
> 
> Nachdem die meisten Provider keinerlei Ingress-Filtering betreiben ist es ein leichtes deine DB zu fluten. Und selbst wenn man zufällig einen ISP hat der ingress filtert - nimmt man sich eben eine Liste von open proxies, ein Botnetz oder tor oder oder oder - Demonstration gefällig? 

 

Naja.. ich denke wir sollten auf dem Boden bleiben. Gehe ich davon aus das ein Angreifer ein Botnetz hat und mir böses will habe ich sicher andere Probleme als eine theoretisch vollaufende DB. Proxylisten sehe ich beim Einsatz eines Cache o.ä. auch nicht als Problem, da sind meist nur wenige wirklich funktionierende Proxys drin und wenn dan sind das zusammen auch "nur" ein paar tausend. Tor, ok, wäre eine Möglichkeit, aber ist denke ich auch nicht ausreichend performant bzw. entsprechend groß um da sehr viel Schaden anzurichten. Und wie Anarcho schön vorgerechnet hat, bei 1 Aufruf je Sekunde macht das 21600 in 6 Stunden. Nehmen wir mal einer knallt mit 100 verschiedenen IPs pro Sekunde rein, das macht 2.160.000 Einträge in der DB. Durchaus leistbar würde ich mal spontan behaupten und mal realistisch betrachtet wer bekommt über eine längeren Zeitraum (außer mit einem Botnetz) 100 verschiedene IPs pro Sekunde zusammen? Im Zweifelsfall  kann man dann die Zeitspanne < 6h setzen, wer braucht schon 6 Stunden für eine Mail, realitisch reicht da auch 1h.

Ok, und über einen Belastungstest können wir mal verhandeln wenn ich noch bissl gescriptet habe, aber ich glaube bei den angenommenen Dimensionen kackt eher der Apache vorher ab.  :Wink: 

----------

## Rene-dev

mann könnte auch die mail addresse in html "verstecken"

ist zwar nicht so sicher wie anarchos lösung, aber braucht dafür kein javascript

http://renehopf.de/test.php

rene[/code]

----------

## return13

wie wäre es denn mit einer art vertrauensnetz? also A vertraut B - ich bekomm von B ein spam - somit fällt B komplett und A teilweise in seinen Vertrauenspunkten und alle anderen die B vertrauen... müsste halt nur jede mail digital siniert sein... pgp...

es wäre zumindest ne überlegung wert denk ich...

Etwas ähnliches wird ja wahrscheinlich schon bei den größeren Email providern benutzt, was ich jedoch meine ist etwas übergreifendes, etwas wo nicht jeder sein eigenes Süppchen kochen muss....

----------

## monade

 *Anarcho wrote:*   

> 
> 
> Zu meiner test.php:
> 
> ...
> ...

 

 :Razz:  Reminder. Ne im Ernst, ich würde die test.php auch gern sehen, auch wenn sie wie du meinst ziemlich simpel gestrickt ist.

----------

## Anarcho

 *monade wrote:*   

>  *Anarcho wrote:*   
> 
> Zu meiner test.php:
> 
> ...
> ...

 

Ah, hast recht, vergessen:

Hier also die test.php:

```
<html>

<head>

<title>So, dann scan mal nach dieser Emailadresse</title>

</head>

<body>

<h1>So, dann scan mal nach dieser Emailadresse</h1>

<form method="get" action="">

   Email: <input type="text" name="email"><br>

   <input type="submit" value="Ab damit">

</form>

<?php

if (isset($_GET['email'])) {

print getJSCryptedString('<a href="mailto:'.$_GET['email'].'">Testmail</a>');

}

   /**

    * Function to encrypt a text which will be decrypted by the browsers Javascript engine. Basically used against spambots.

    * @param string $text The text to encrypt

    * @return string

    */   

   function getJSCryptedString($text) {

      $len = strlen($text);

      $hash='v'.md5($text.rand(1,50));

      $compl = getRandomString($len);

      $enc =  getEncString($text,$compl);

      $ret = redoJS($hash,$enc,$compl);

      return '<script language="javascript">'.$ret.'</script>';

   }

   

   function getRandomString($length) {

      $ret = array();

           $possible = "0123456789bcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

           $i = 0;

           while ($i < $length) {

         $char = substr($possible, mt_rand(0, strlen($possible)-1), 1);

         $ret[] = ord($char);

         $i++;

      }

      return $ret;

   }

   

   function getEncString($email, $compl) {

           $len = strlen($email);

           $ret = array();

           for ($i=0;$i<strlen($email);$i++) {

                   $ret[] = (ord(substr($email,$i,1)) ^ $compl[$i]);

           }

           return $ret;

   }

   function redoJS($h,$enc,$compl) {

           $ret = '';

           $ret.= 'var '.$h.'1 = "'.implode('.',$enc).'";';

           $ret.= 'var '.$h.'2 = "'.implode('.',$compl).'";';

   

           $ret.= 'var '.$h.'4 = new Array();';

           $ret.= 'var '.$h.'5 = new Array();';

           $ret.= $h.'4 = '.$h.'1.split(".");';

           $ret.= $h.'5 = '.$h.'2.split(".");';

           $ret.= 'var ret = "";';

           $ret.= 'var '.$h.'3 = '.$h.'1.length;';

           $ret.= 'for(i=0;i<'.$h.'3;i++){';

           $ret.= 'ret+=String.fromCharCode('.$h.'5[i] ^ '.$h.'4[i]);';

           $ret.= '}';

           $ret.= 'document.write(ret);';

           return $ret;

   }

?>

</body>

</html>
```

----------

## monade

Danke!   :Smile: 

----------

