Email Obfuscation με χρήση PHP και javascript


Τα emails επικοινωνίας είναι χρήσιμα για κάθε site. Η ύπαρξή τους στις ιστοσελίδες τα κάνει ευάλωτα σε ειδικά robots γνωστά ως email spambots.

Τα spambots είναι ειδικά προγράμματα τα οποία διαβάζουν τις σελίδες πολλών sites, εξάγουν από αυτές τα emails που βρίσκουν και τα καταχωρίζουν σε βάσεις δεδομένων με σκοπό την πώληση τους σε spammers. Το αποτέλεσμα είναι να καταλήγουν περισσότερα spam στα mailbox μας.

Ας δούμε κάποιους τρόπους προφύλαξης.

Χρήση φορμών επικοινωνίας αντί συνδέσμων με τα emails
Μειονεκτήματα:

  • Χρειάζεται προσεκτικός σχεδιασμός της φόρμας προκειμένου να είναι εύχρηστη
  • Συνήθως ο χώρος για το κείμενο είναι μικρός
  • Χρειάζεται μια μικρή εξοικίωση του επισκέπτη
  • Ο επισκέπτης δε λαμβάνει αντίγραφο του email σε πολλές περιπτώσεις

Χρήση HTML entities
Στην περίπτωση αυτή γίνεται αντικατάσταση του κάθε χαρακτήρα του email με το αντίστοιχο entitie. πχ το email [email protected] θα αντικατασταθεί με το test@test.com

Μια php συνάρτηση που κάνει αυτή την αντικατάσταση είναι η παρακάτω:

function ObfuscateEmail($email)
{
  $enc = "";
  for ($i = 0, $len = strlen($email); $i < $len; ++$i)
    $enc .= "&#" . ord($email[$i]) . ";";
  return $enc;
}

Χρήση rot13

Ο rot13 είναι ένας απλός αλγόριθμος αντικατάστασης κατά την εφαρμογή του οποίου κάθε γράμμα του αλφαβήτου αντικαθίσταται από το γράμμα που βρίσκεται 13 θέσεις μετά. πχ Το A αντικαθίσταται με το N, το B με το O και ούτω καθεξής.

rot13

Για την κρυπτογράφηση με rot13 η php διαθέτει την ενσωματωμένη συνάρτηση str_rot13. Για την αποκρυπτογράφηση χρησιμοποιείται javascript, όπως φαίνεται παρακάτω (πηγή: http://jsfromhell.com/string/rot13):

String.prototype.rot13 = function(){
  return this.replace(/[a-zA-Z]/g, function(c){
    return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);
  });
};

Αντικατάσταση @ και .
Πολύ παλιά και όχι τόσο αποτελεσματική μέθοδος, η οποία χρησιμοποιείται ακόμα και σήμερα. Στην περίπτωση αυτή αντικαθίσταται το @ με «at» και το . με «dot». Μέσω google μπορούμε να βρούμε πολλά emails αυτής της μορφής και με ένα regular expression να πάρουμε το αρχικό email.

Προσθήκη NOSPAM, REMOVEME
Η μέθοδος αυτή εκτός από το ότι ανιχνεύεται εύκολα από τα spambots απαιτεί να γνωρίζει ο χρήστης ότι πρέπει να σβήσει το NOSPAM, REMOVEME, όταν θα ανοίξει ο mail client του.

Αντικατάσταση email με εικόνα
Στην περίπτωση αυτή γίνεται αντικατάσταση του κειμένου με εικόνα στην οποία απεικονίζεται το email. Δείτε ένα παράδειγμα. Ένα πρόβλημα που προκύπτει από αυτή τη μέθοδο είναι ότι η εικόνα δε μπορεί να είναι clickable.

Αντιστροφή όλων των χαρακτήρων
Το email [email protected] γίνεται moc.tset@tset με τη χρήση της strrev και στη συνέχεια μέσω javascript επανέρχεται στην αρχική του μορφή. Παράδειγμα συνάρτησης αντιστροφής σε javascript:

String.prototype.reverse = function() {
  return this.split("").reverse().join("");
}

Υπάρχουν και άλλοι τρόποι για email obfuscation εκτός από τους παραπάνω. Προσωπικά προτιμώ τους 3 πρώτους (φόρμες, entities και rot13). Εσείς;


gvre
Γίνετε επεξεργασία, Παρακαλώ περιμένετε...
+ 2

Ο Συγγραφέας

Twitter Facebook Linkedin
web developer

2 Σχολια

  1. _tasos says:

    Ξέρεις αν τα bot που σκανάρουν για email τις σελίδες διαβάζουν και javascript κώδικα που είναι μέσα στην HTML ή κάποιο .js αρχείο το οποίο δηλώνουμε στο head;

    Σκεφτόμουν το σενάριο το email να βρίσκεται μέσα σε javascript κώδικα και με την εκτέλεση του να εμφανίζεται στη σελίδα μας, π.χ. στο document.ready event ή στο mouse over στο link που έχει το email.

  2. gvre says:

    Εξαρτάται από το bot. Ακόμα και αν δεν το κάνουν τώρα λογικά θα το κάνουν στο μέλλον. Το παρακάτω παράδειγμα δείχνει τον τρόπο που μπορεί ένα bot να διαβάσει τα emails που βρίσκονται μέσα σε js αρχεία.

    <?php
    $s = @file_get_contents("http://www.ondesign.gr/test.js");
    if ($s !== false)
    {
            $pattern = '#\b([a-z0-9\.-]+@[a-z0-9\.-]+)\b#si';
     
            if (preg_match_all($pattern, $s, $m))
            {
                    print_r($m[1]);
            }
    }
    ?>

    Προσωπικά χρησιμοποιώ την ObfuscateEmail και δεν έχω πρόβλημα μέχρι τώρα. Αν κάποια στιγμή τα bots αρχίσουν να εντοπίζουν emails αυτής της μορφής, κάτι το οποίο δεν είναι δύσκολο, θα χρησιμοποιήσω rot13 μόνο στο κομμάτι πριν το @ και στο domain και θα κρατήσω το tld ως έχει.

Αφήστε ένα σχόλιο

You must be logged in to post a comment.