Enrico: Auslesen des Inhalts eines span-Bereiches klappt nicht

Hallo,

ich grüble gerade über unserer "Kontakte"-Seite, auf der unsere verschiedenen Email-Adressen über PHP ausgegeben werden.

Da ich unsere Email-Adressen natürlich so ausgeben muss, dass sie weitestgehend nicht von Spambots ausgelesen werden können, habe ich verschiedene, hoffentlich einigermassen sichere Schutzmechanismen eingebaut:

Die Email-Adressen werden, aufgeteilt anhand des @-Zeichens, in umgedrehter Schreibweise und das @-Zeichen zudem in Unicode-Kodierung ausgegeben, so dass zumindest dieses Zeichen beim Kopieren nicht mitkopiert wird. Desweiteren wird in jede Email-Adresse ein im Browser nicht sichtbarer zufälliger Code eingefügt, so dass ich folgenden Quelltext habe:

  
<body>  
  
   <table cellspacing="0">  
      <tbody>  
         <tr>  
            <td>BAND:</td>  
            <td>  
               Robert  
               <span id="E0" class="azsk">  
                  ed.yppupcitoahc  
                  <span class="gLwD">y8GT</span>  
                  <span class="M5L3">tkatnok</span>  
               </span>  
            </td>  
         </tr>  
         <tr>  
            <td>MANAGEMENT:</td>  
            <td>  
               <span id="S0">Derzeit unbesetzt! Interessiert?</span>  
            </td>  
         </tr>  
         <tr>  
            <td>BOOKING:</td>  
            <td>  
               <span id="S1">Derzeit unbesetzt! Interessiert?</span>  
            </td>  
         </tr>  
         <tr>  
            <td>WEBMASTER:</td>  
            <td>  
               Enrico  
               <span id="E1" class="azsk">  
                  ed.oohay  
                  <span class="gLwD">y8GT</span>  
                  <span class="M5L3">llelocirne</span>  
               </span>  
            </td>  
         </tr>  
      </tbody>  
   </table>  
  
   <script type="text/javascript" language="javascript">  
  
      if (window.addEventListener)  
         window.addEventListener("load",Initialisieren,false);  
      else  
         if (window.attachEvent)  
            window.attachEvent("onload",Initialisieren);  
         else  
            window.onload=Initialisieren;  
  
   </script>  
  
</body>  

Bitte nicht über die seltsamen Klassennamen wundern, diese werden von PHP ebenfalls zufällig erzeugt, um es Spambots, die vielleicht schon mit CSS umgehen können, ein Stückchen schwerer zu machen.

Hier der Screenshot der Ausgabe im Browser, einmal normal, einmal alles markiert:

Ich habe die Datei zwar auch hoch geladen, aber da erfolgt seltsamerweise gar keine Ausgabe im Browser.

Ich möchte nun über JavaScript nach Anklicken einer der Email-Adressen die Email-Adressen rekonstruieren und mit ihnen weiter arbeiten.

Hierzu habe ich folgende Funktion gebastelt, die onload ausgeführt wird:

  
function Initialisieren()  
{  
   var a = 0,  
       b,  
       c;  
  
   do  
   {  
      try  
      {  
         b = document.getElementById("E" + a);  
  
         if (b !== null)  
         {  
            b.onclick = function()  
            {  
alert (typeof b);  
               c = b.textContent || b.innerText || b.innerHTML;  
alert (c);  
  
            };  
  
            a += 1;  
         }  
      }  
      catch(e){}  
   }  
   while (b !== null)  
}  

Hierbei wird der Variable "b" solange die Referenz auf Elemente mit der ID "E" (für "Email"), gefolgt von einer fotlaufenden Zahl übergeben, bis keine Referenzierung mehr möglich ist.

Der Referenz wird dann das "onclick"-Ereignis zugeordnet und soll eigentlich den Inhalt des angeklickten Elements liefern, was aber leider nicht der Fall ist.

alert (typeof b) liefert mir "object" und läßt mich annehmen, dass die Referenzierung geklappt hat.
Der nachfolgende "alert"-Befehl wird aber nicht mehr ausgeführt und die Firefox-Fehlerkonsole bringt mir für die Zeile c = b.textContent || b.innerText || b.innerHTML; einen "TypeError: b is null".

Was habe ich falsch gemacht?

Vielen Dank für eure Hilfe und Gruß
Enrico

  1. Ah, kaum ist der Sylvester-Rummel vorbei und man kann wieder hinterm Sofa hervorkommen, schon hat man eine Idee.

    Initialisierung ist klar, dass die läuft.

    Bei onclick bin ich aber ja gar nicht mehr auf irgendeiner Referenz und deswegen ist "b" null.

    Enrico

    1. Hallo,

      und auch ein gutes Neues Jahr an alle!

      Jetzt bin ich fast schon am Ziel meines Vorhabens angelangt, lediglich das Ausführen des dynamisch erzeugten <a href="mailto:...">-Links wird noch ignoriert:

        
      function Email_aufrufen(Email)  
      {  
         var mail = "mailto:" + Email;  
         var a = document.createElement('a');  
        
         a.href = mail;  
         a.click();  
      }  
      
      

      Was muss ich hier noch ändern, damit der Link ausgeführt wird?

      Die Übergabe der Empfänger-Email-Adresse klappt, das habe ich mittels eines hier weggelassenen alert(mail)-Befehls geprüft.

      Gruß,
      Enrico

      1. Was muss ich hier noch ändern, damit der Link ausgeführt wird?

        Den erzeugten Link mittels document.body.appendChild(a) noch in die Dokumentenstruktur einhängen.

        Gruß,
        Enrico

        1. @@Enrico:

          nuqneH

          Nicht gelöst. Die Lösung ist, wie Mattes sagte, das JavaScript zu entsorgen. Restlos.

          Intelligente Bots werden auch JavaScript ausführen; gegen dumme Bots hilft einfaches Escapen, ohne dass Benutzer dadurch eingeschränkt werden.

          Qapla'

          --
          „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  2. Da ich unsere Email-Adressen natürlich so ausgeben muss, dass sie weitestgehend nicht von Spambots ausgelesen werden können, habe ich verschiedene, hoffentlich einigermassen sichere Schutzmechanismen eingebaut:

    Möchte dich jetzt nicht enttäuschen, aber deine Mühe war umsonst.

    Erstens landen E-Mail-Adressen über kurz oder lang doch in irgendeiner Adressliste (und ist sie da erstmal drin, gibt es kein Halten mehr). Ich hatte mal einen Fall mit einer Adresse, die ich nur an etwa ein Dutzend Betriebe weitergegeben hatte, sie war nirgends veröffentlicht und für Dritte nicht von Nutzen, da sie nur der internen Datenübermittlung diente – nach bummelig einem dreiviertel Jahr traf der erste Spam ein.

    Es dürfte zum Standardumfang jeder halbwegs modularen Schadsoftware gehören, sämtliche Adressbücher und E-Mails des befallenen Rechners abzugrasen. Und es sind diese befallenen Rechner, die zum Versand von Spam genutzt werden. Es gibt sie in unüberschaubaren Massen.
    Adressen auf Webseiten einzusammeln ist dagegen recht mühsam und vermutlich auch vergleichsweise ineffizient; das Gros der persönlichen Adressen wird selten veröffentlicht und auf 08/15-Adressen wie info@ oder webmaster@ kommt man auch, ohne das Web zu durchsuchen (und dahinter verbergen sich dann Leute, die von einem supergünstigen Potenzmittelangebot eher wenig überrascht, geschweige denn begeistert sein dürften).

    Was hilft dir eine noch so einbruchssichere Haustür, wenn dein Nachbar/Freund/Verwandter deinen Krams durch deine immer offen stehende Gartentür verschenkt?

    Zweitens habe ich schon vor Jahren auf einer in der robots.txt eingetragenen Seite eine Testadresse mitsamt Kontaktformular veröffentlicht. Es tauchen im Protokoll des Mailservers die wildesten Kombinationen von erfundenen E-Mail-Adressen auf, aber an diese Adresse wurde noch keine einzige Mail geschickt.
    Meine Vermutung ist, dass Adressammler (wenn es denn noch welche gibt), nicht stupide das Web durchforsten, sondern kurzerhand Google nach Kontaktseiten fragen. Die Trefferquote ist ungleich höher und es macht kaum Arbeit. Seiten jedoch, die Google wegen der robots.txt-Sperre nicht aufnimmt, bleiben auch Spammern verborgen.

    Es kommt dann, drittens und sehr wichtig, noch hinzu, dass die ganze Adressverschleierei und Captchatitis vor allem eine Gruppe behindert: Diejenigen, die aus guten Gründen Kontakt suchen und auch Kontakt haben sollen.

    Wenn ich also gute Kunden belästige, gleichzeitig klar ist, mir mit meinem Tun gegenüber den Pösewichten™ nur ein paar Monate Aufschub verschaffen zu können, dann trete ich den ganzen technischen Aufwand doch lieber in die Tonne – zumal es eine anscheinend ganz banale Hilfe gibt.

    1. Moin,

      Da ich unsere Email-Adressen natürlich so ausgeben muss, dass sie weitestgehend nicht von Spambots ausgelesen werden können, habe ich verschiedene, hoffentlich einigermassen sichere Schutzmechanismen eingebaut:
      Möchte dich jetzt nicht enttäuschen, aber deine Mühe war umsonst.

      das sehe ich exakt genauso, wenn auch mit geringfügig anderen Erfahrungen oder Vermutungen dahinter.

      Erstens landen E-Mail-Adressen über kurz oder lang doch in irgendeiner Adressliste (und ist sie da erstmal drin, gibt es kein Halten mehr). Ich hatte mal einen Fall mit einer Adresse, die ich nur an etwa ein Dutzend Betriebe weitergegeben hatte, sie war nirgends veröffentlicht und für Dritte nicht von Nutzen, da sie nur der internen Datenübermittlung diente – nach bummelig einem dreiviertel Jahr traf der erste Spam ein.

      Es wäre jetzt spannend, bei welchem Provider/Hoster diese Mailadressen lagen. Ich hatte vor vielen Jahren mal für ein Weilchen einen Freemail-Account bei Arcor - für die Zwecke, wo man mal auf die Schnelle eine Mailadresse braucht, diese aber hinterher wieder wegwerfen kann.
      Dort konnte ich mir noch so phantasievolle Mailadressen ausdenken, immer traf innerhalb von drei bis vier Wochen der erste SPAM ein, auch wenn ich die Adresse bis dahin noch gar nicht genutzt hatte. Ich hatte damals Arcor selbst im Verdacht, die Mailadressen weiterzugeben.

      Es dürfte zum Standardumfang jeder halbwegs modularen Schadsoftware gehören, sämtliche Adressbücher und E-Mails des befallenen Rechners abzugrasen. Und es sind diese befallenen Rechner, die zum Versand von Spam genutzt werden. Es gibt sie in unüberschaubaren Massen.

      Das stimmt, und den Aspekt hatte ich noch gar nicht bedacht. Das erklärt aber vielleicht auch eine andere Sache: Seit Jahren gebe ich meine Kontaktadresse(n) z.B. im Web-Impressum offen und unverschleiert an. SPAM kommt auf diesen Adressen kaum.
      Dafür habe ich auf meiner eigenen Domain einen Catch-All-Mailaccount laufen, und es ist hochinteressant, was da immer wieder für Mailadressen einfach ausprobiert werden. Eine Zeitlang waren etwa accounting@example.org und uucp@example.org hoch im Kurs, derzeit ist es gehtso@example.org. Das sind Adressen, die ich nie genutzt, geschweige denn weitergegeben habe, also hat sie sich irgendjemand einfach ausgedacht, oder ein automatisch arbeitendes Script hat sie nach irgendeiner Logik erzeugt.

      Zweitens habe ich schon vor Jahren auf einer in der robots.txt eingetragenen Seite eine Testadresse mitsamt Kontaktformular veröffentlicht. Es tauchen im Protokoll des Mailservers die wildesten Kombinationen von erfundenen E-Mail-Adressen auf, aber an diese Adresse wurde noch keine einzige Mail geschickt.
      Meine Vermutung ist, dass Adressammler (wenn es denn noch welche gibt), nicht stupide das Web durchforsten, sondern kurzerhand Google nach Kontaktseiten fragen. Die Trefferquote ist ungleich höher und es macht kaum Arbeit. Seiten jedoch, die Google wegen der robots.txt-Sperre nicht aufnimmt, bleiben auch Spammern verborgen.

      Eine gewagte These. Könnte natürlich sein, scheint mir aber weit hergeholt.

      Es kommt dann, drittens und sehr wichtig, noch hinzu, dass die ganze Adressverschleierei und Captchatitis vor allem eine Gruppe behindert: Diejenigen, die aus guten Gründen Kontakt suchen und auch Kontakt haben sollen.

      Ja. Das ist der Hauptgrund, diesen Unfug bleiben zu lassen.

      Guten Start ins neue Jahr,
       Martin

      --
      Wer im Steinhaus sitzt, soll nicht mit Gläsern werfen.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Ich hatte mal einen Fall mit einer Adresse, die ich nur an etwa ein Dutzend Betriebe weitergegeben hatte, sie war nirgends veröffentlicht und für Dritte nicht von Nutzen, da sie nur der internen Datenübermittlung diente – nach bummelig einem dreiviertel Jahr traf der erste Spam ein.

        Es wäre jetzt spannend, bei welchem Provider/Hoster diese Mailadressen lagen.

        Auf meinem eigenen Server. Dass diese Adresse auf irgendeinem anderen Weg als über das besagte Ausforschen in Spamlisten gelandet ist, halte ich für ausgeschlossen (oder zumindest ist mir bislang kein anderer plausibler Grund eingefallen).

        Dafür habe ich auf meiner eigenen Domain einen Catch-All-Mailaccount laufen, und es ist hochinteressant, was da immer wieder für Mailadressen einfach ausprobiert werden. Eine Zeitlang waren etwa accounting@example.org und uucp@example.org hoch im Kurs, derzeit ist es gehtso@example.org. Das sind Adressen, die ich nie genutzt, geschweige denn weitergegeben habe, also hat sie sich irgendjemand einfach ausgedacht, oder ein automatisch arbeitendes Script hat sie nach irgendeiner Logik erzeugt.

        Bei dem, was hier so aufläuft, habe ich es aufgegeben, nach einer Logik zu suchen. Ein einziges Irrenhaus. Es ist ja nicht nur das wahllose Durchprobieren von irgendwelchen wildfremden Namen, da werden selbst Bestandteile meines Namens beinahe bis zur Unkenntlichkeit durcheinandergewürfelt und als Mailadresse ausprobiert. Bisweilen scheint es sich um echte Zufallstexte zu handeln. Völlig bekloppt.