Απόκρυψη διευθύνσεων email με JavaScript

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από skeftomilos » 26 Οκτ 2006 01:47

Τζαβασκριπτούργημα! :D

Μου αρέσει πολύ το SpAm$PrOtEcToR['k'][k], μια πιο σαδιστική εκδοχή θα ήταν έτσι: k(SpAm$PrOtEcToR['k'][k](k).k) :P

Η ρουτίνα mail μπορεί να γίνει μέθοδος του SpAm$PrOtEcToR για να μείνει καθαρό τπ global namespace:

Κώδικας: Επιλογή όλων

onfocus="SpAm$PrOtEcToR.mail(this)" onmouseover="SpAm$PrOtEcToR.mail(this)"
Η φόρτωση του αρχείου js_email_antispam_02.js μπορεί να καθυστερήσει περισσότερο από 300 msec. Αν συμβεί αυτό ανοίγει ένα χρονικό gap όπου η αποκωδικοποίηση θα αποτυγχάνει. Μια λύση είναι να γίνει η αρχικοποίηση της load_time στο εξωτερικό αρχείο.

Το caching ενός τόσο μικρού αρχείου είναι ελάχιστα οφέλιμο. Η διάρκεια downloading είναι ένα μικρό κλάσμα του χρόνου που μεσολαβεί από το request ως το 304 response, ειδικά αν ο server είναι μακρυά ή είναι φορτωμένος.

Το εξωτερικό αρχείο μπορεί να παραχθεί δυναμικά ώστε να είναι κάθε φορά διαφορετικό:

Κώδικας: Επιλογή όλων

<script type="text/javascript" src="js_email_antispam.php?9Hd610aMkg7"></script>
Ακόμα και η κλήση του αρχείου μπορεί να γίνει δυναμικά:

Κώδικας: Επιλογή όλων

<script type="text/javascript">
  document.write&#40;'<scr' + 'ipt type="text/javascript" src="js_email_antispam.php?' + k + '"></scr' + 'ipt>'&#41;
</script>
Στην περίπτωση που μια σελίδα δεν έχει emails τότε το script μπορεί να παραληψθεί.

Μου πέρασε από το νου και κάτι που αρχίζει από AJ, αλλά έφυγε όσο γρήγορα ήρθε. :)

Η ιδέα με τα overlapping images μπορεί να λειτουργήσει και με ένα μοναδικό image, να ένα ακόμα demo:

- Απόκρυψη email με χρήση μίας εικόνας

Μπορεί να παίξει και transparency για ακόμα περισσότερο χάος.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από cpulse » 26 Οκτ 2006 02:27

Μπράβο βρε Σκεφτόμυλε.. χωρίς εσένα δεν θα το έφτιαχνα..
Πολύ καιρό τώρα γύρναγε στο μυαλό μου μια τέτοια εφαρμογή, ειδικά για ένα project management CMS που ετοιμάζω αυτό τον καιρό και έχει για πρώτο μέλημα του την αμεσότητα. Αλλά δεν μπορούσα να βγάλω κάτι σωστό που να είναι και ασφαλές.. τελικά ο χειρισμός του χρόνου είναι αυτός που δίνει ένα τόνο χάους αλλά και μαγείας σε όλα τα προγράμματα.

Πάντως.. κάπου θυμάμαι κι ένα άλλο thread που έχει να κάνει με την ασφάλεια για forms. Όλη αυτή η συζήτηση κολάει κι εκεί πολύ καλά.

Σχετικά με την εικόνα.. το θέμα είναι να μη σου κάνει OCR ο cracker. Αν οι εικόνες είναι ξεχωριστές τον δυσκολεύεις αρκετά.

Άβαταρ μέλους
iffor
Δημοσιεύσεις: 778
Εγγραφή: 14 Μάιος 2005 01:19
Τοποθεσία: Παράδεισος
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από iffor » 26 Οκτ 2006 10:52

cpulse έγραψε:Σχετικά με την εικόνα.. το θέμα είναι να μη σου κάνει OCR ο cracker. Αν οι εικόνες είναι ξεχωριστές τον δυσκολεύεις αρκετά.
Καλημερούδια!!!
Να μη σου κάνει τι?!?!? :o :wink:
Τι είναι αυτό το OCR?!?!?! :oops:
μια νέα αρχή ξεκίνησε...
ένας καινούριος δρόμος άνοιξε...
redpanda.gr

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από cpulse » 26 Οκτ 2006 11:09

iffor έγραψε: Τι είναι αυτό το OCR?!?!?! :oops:
Βιασμός!!! :)

Optical Character Recognition.. σαν αυτό που κάνουν τα προγράμματα των scanners για να δακτυλογραφούν αυτόματα μια σελίδα.

Άβαταρ μέλους
alkisg
Δημοσιεύσεις: 265
Εγγραφή: 03 Ιουν 2005 11:53
Τοποθεσία: Ιωάννινα
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από alkisg » 27 Οκτ 2006 11:40

Φτου σας πορωμένοι, με κολλήσατε κι εμένα!!! :lol:

Σχεδίαζα να ποστάρω κι εγώ τη δική μου version και να σας "προκαλέσω" να την χακέψετε φτιάχνοντας κάποιο bot... Δυστυχώς αυτόν τον καιρό δεν έχω καθόλου χρόνο, οπότε το γράφω μόνο σαν ημιτελή ιδέα..

Απόκρυψη email χωρίς javascript:

1ο βήμα:
Ο user κάνει hit τη σελίδα page.php. Αυτή απαντάει με το email κωδικοποιημένο ως
<a ref="getemail.php?encryptedmail=DFGHJTYUIOWDFGHJKIUYTFGHJK">

Το πλεονέκτημα εδώ είναι ότι η κωδικοποίηση και η αποκωδικοποίηση γίνεται σε php. Έτσι μπορεί π.χ. τα 3 πρώτα γράμματα να είναι το κλειδί με το οποίο θα κάνουμε XOR τα επόμενα για να βγει το mail. Αν δεν δει τον php κώδικά μας ο spammer δεν το αποκρυπτογραφεί όσο και να χτυπιέται.

3ο βήμα:
Όταν γίνει το κλικ, καλείται η getemail.php. Αυτή κάνει την αποκρυπτογράφηση και απαντάει με
<?php
// ...decoding...
header("Location: mailto:mail@domain.gr");
exit();
?>

Δηλαδή το email δεν υπάρχει σε κώδικα σελίδας, έρχεται απευθείας σαν URL! Έτσι ο spammer θα πρέπει να αλλάξει το bot ειδικά για τη σελίδα μας, ώστε να τραβάει email από URL.

Ουπς, που πήγε το 2o βήμα; Το δεύτερο βήμα είναι η προστασία που πρέπει να κάνουμε ώστε να μην κάνουμε redirect στο mail μας όταν κάποιος γράψει απλά
getemail.php?encryptedmail=DFGHJTYUIOWDFGHJKIUYTFGHJK"
στο URL, ή αν το καλέσει από bot.

Πώς το κάνουμε αυτό;
α) Ενσωματώνουμε πληροφορία referrer στο encryptedmail, ώστε να απαντάμε μόνο αν προέρχεται από την page.php.
β) Ενσωματώνουμε πληροφορία time στο encryptedmail, και απαντάμε μόνο π.χ. μετά από 3 δευτερόλεπτα και μέχρι 10 λεπτά. Έτσι όταν αυτός προσπαθήσει να κάνει debugging μετά από μισή ώρα θα βλέπει άλλα-αντί-άλλων. Κι αν ένα bot το χτυπήσει στο πρώτο δευτερόλεπτο, πάλι θα λάβει λάθος απάντηση. Αυτό αν θέλουμε το συνδυάζουμε με javascript, ώστε να απενεργοποιήσουμε το link για πολύ γρήγορους users.
γ) Βάζουμε delay πριν τον κάνουμε redirect για να του σπάσουμε τα νεύρα. Για έναν χρήση 5-10 δευτερόλεπτα καθυστέρηση μέχρι να γίνει το redirect δεν είναι τίποτα, ενώ το bot θα αργήσει πολύ αν θέλει να μαζέψει πολλά mails από το site μας.
δ) ΑΝ θέλουμε, κρατάμε στο php session πόσα κλικς έγιναν. Μετά το π.χ. τρίτο κλικ υποθέτουμε ότι είναι bot, αφού ένας χρήστης δεν θέλει να στείλει email σε 4 χρήστες ταυτόχρονα από το ίδιο site, και αντί να τον κάνουμε redirect στο mail μας του βγάζουμε σελίδα να ξανακάνει το κλικ αργότερα λόγω προστασίας από spambots.
ε) Καμιά άλλη ιδέα; Να βάζουμε και κανένα cookie από την page.php για μεγαλύτερη σιγουριά;

Πάντως όλα τα παραπάνω αφού γραφούν σε function, μετά καλούνται εύκολα, π.χ. <? dumpmail('mail@domain.gr') ?>, επειδή η κρυπτογράφηση, η αποκρυπτογράφηση, ο έλεγχος referrer, session κτλ μπορούν να γίνουν μέσα από τη dumpmail...

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από cpulse » 27 Οκτ 2006 13:12

Ωραία κι αυτά!..

Συμφωνώ απόλυτα για την χρονοκαθυστέρηση. Αν το bot θέλει να ψάξει μερικές χιλιάδες domains στην καθησιά του δεν θέλει να καθυστερεί. Αλλά γι αυτό τον λόγο αυτά τα bot λειτουργούνε με πολλά threads. Εγώ κάποτε είχα φτιάξει searchομηχανή και είχα αναγκαστεί να φτιάξω 2-3 εκδόσεις για να μην έχει τέτοιες καθυστερήσεις. Από κει ξέρω και όλα αυτά για τα οποία λέω σε αυτή την συζήτηση. Κάποια sites ήταν τόσο αργά που έστω και το ξεχωριστό thread έπρεπε να τα παρατήσει.

Αλλά όμως, από όσα έχω δει όταν μπαίνουν στα sites που έχω και μπορώ να παρακολουθώ δεν χρησιμοποιούν cookies. Αποτέλεσμα είναι το κάθε hit να ανοίγει ξεχωριστό session. Οπότε αυτά που λες για τα sessions μπορούν να ισχύουν, αλλά περισσότερο για άνθρωπο spammer.

Άβαταρ μέλους
alkisg
Δημοσιεύσεις: 265
Εγγραφή: 03 Ιουν 2005 11:53
Τοποθεσία: Ιωάννινα
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από alkisg » 27 Οκτ 2006 16:31

> Αποτέλεσμα είναι το κάθε hit να ανοίγει ξεχωριστό session.
Ε, αν είναι ξεχωριστό session, δεν του στέλνουμε το email!
Δηλαδή αν άλλο thread κάλεσε την page.php και άλλο την getemail.php, τότε δεν τον αφήνουμε να το δει...
Αυτό βέβαια δε θα παίξει αν το ίδιο thread καλέσει και τις δύο, αλλά τότε θα το πιάσει η καθυστέρηση...

Φυσικά εννοείται ότι η ιδέα παραπάνω δεν είναι άρτια, θέλει ακόμα μελέτη για να "δέσει"...

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από cpulse » 27 Οκτ 2006 16:56

Κι αν κάποιος μπαίνει στην σελίδα από bookmark;

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από Rapid-eraser » 27 Οκτ 2006 19:47

* to ocr mporeis va to paraplaviseis aveta me eva gaussian blur ...
poli efkolo va graftei...
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
alkisg
Δημοσιεύσεις: 265
Εγγραφή: 03 Ιουν 2005 11:53
Τοποθεσία: Ιωάννινα
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από alkisg » 27 Οκτ 2006 20:38

Bookmark στο getmail.php? Αυτό δεν έχει νόημα να το κάνει κανείς bookmark, είναι μόνο για να κάνει redirect στο email και οι παράμετροί του αλλάζουν κάθε φορά...

Αν λες για bookmark στην αρχική σελίδα page.php, τότε δε βλέπω να υπάρχει πρόβλημα, με το hit στην page.php είναι που ξεκινάει το session.

Παράδειγμα
Χρήστης:
hit στην page.php => ξεκινάει session
κλικ στο email => hit στην getemail.php => ελέγχεται το session => ΟΚ, γίνεται redirect στο email

Bot:
hit στην page.php => ξεκινάει session
άλλο thread κάνει hit στην getemail.php => δεν υπάρχει session => NOT OK, δε γίνεται redirect στο email

Bot#2:
hit στην page.php => ξεκινάει session
το ίδιο thread κάνει hit στην getemail.php => υπάρχει session => NOT OK, κόβεται από τον timer. Πρέπει να περιμένει κάποια δευτερόλεπτα.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από cpulse » 27 Οκτ 2006 21:05

@alkisg: Ναι έχεις δίκιο.. πολύ έξυπνη η λογική σου και την δοκίμασα.. δουλεύει μια χαρά! Ειδικά άμα την μπερδέψεις και με λίγη χρονοκαθυστέρηση με έναν timer από javascript είναι τέλειο!

@Rapid-eraser: Σίγουρα κάνει δουλειά.. και υπάρχουν κι άλλα κολπάκια που έχω δει.. να κόβουν τις εικόνες σε κομμάτια.. να πετάνε άσχετες γραμμές.. να βάζουν τυχαία pixels σαν το noise filter του photoshop κι άλλα διάφορα. Όσο έχεις φαντασία μπορείς να κάνεις άπειρα τέτοια.. αλλά εξαρτάται και πόση φαντασία έχει κι αυτός που σου επιτίθεται :-/

Άλλη ιδέα.. σκεφτόμουνα οτι μπορεί κάποιο πονηρό bot αντί να ανοίγει threads και να περιμένει όταν βλέπει timers, να τα εκτελεί αμέσως. Οπότε άλλη μια ακόμα ποιο πονηρή σκέψη είναι να κάνεις διαδοχικά XORs με timers που μπερδεύουν το bot.. πχ:
setTimeout(function() { deutero_xor(); }, 300);
setTimeout(function() { prwto_xor(); }, 10);

(εννοείται XOR με διαφορετικές τιμές, γιατί αν βάλεις τις ίδιες κάνεις μια τρύπα στο νερό)

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από cherouvim » 27 Οκτ 2006 21:26

Δείτε το δικό μου captcha

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από skeftomilos » 28 Οκτ 2006 02:42

Άλκη δοκιμάζω τη μέθοδο με το redirect και διαπιστώνω μια δυσάρεστη παρενέργεια: η σελίδα του browser αλλάζει. Δηλαδή μόλις γίνει κλικ στο link getmail.asp...

Εικόνα

...ανοίγει ο email client (στην περίπτωσή μου ο Thunderbird) και...

Εικόνα

...μια νέα σελίδα αντικαθιστά την προηγούμενη. :(

Ο αρχικός σκοπός μας ήταν να διατηρήσουμε τα emails σε μορφή ενεργών links για διευκόλυνση του χρήστη. Θα μπορούσαμε να τον αφήσουμε να αντιγράψει το email από μια εικόνα (σαν το captcha του cherouvim), ή να το γράψουμε σε μορφή john at mail dot com. Το οποίο ίσως είναι τελικά προτιμότερο από την πιθανότητα να του σερβίρουμε λάθος mail γιατί το script τον αναγνώρισε σαν robot. Η πιθανότητα αυτή είναι άσχημη γιατί ο χρήστης δεν έχει άμεσα τη δυνατότητα να ελέγξει αν το mail είναι σωστό ή όχι, μπορεί μόνο να δοκιμάσει να στείλει το μήνυμά του, και να ελπίζει πως θα πάρει απάντηση.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
alkisg
Δημοσιεύσεις: 265
Εγγραφή: 03 Ιουν 2005 11:53
Τοποθεσία: Ιωάννινα
Επικοινωνία:

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από alkisg » 28 Οκτ 2006 10:45

Έχεις δίκιο για την παρενέργεια, όμως διορθώνεται αν βάλουμε ένα iframe:
http://www.alkisg.com/freestuff/page.php
Δυστυχώς στον firefox προσθέτει back πληροφορία στο history του browser. Στον ΙΕ δουλεύει καλά αλλά για ένα μόνο κλικ, μετά πάλι προσθέτει πληροφορία history.

Σε καμία περίπτωση δε λέω να στείλουμε λάθος email. Το χειρότερο που θα πρέπει να "πάθει" ο χρήστης είναι να αντιγράψει με το χέρι το mail at domain dot gr ή το captcha (δηλαδή το getemail.php να σερβίρει κενή σελίδα).

άσχετο: τι redirect έβαλες; το header("location") της php δε βγάζει "Object moved" στον firefox, πάει κατευθείαν...

Η χρονοκαθυστέρηση μπορεί να γίνει και μέσα από την php, δε θα σκοτώσει ο server το script αν καθυστερήσει 5 δευτερόλεπτα...

Δεν προτείνω να εφαρμόζεται γενικά αυτή η μέθοδος, αλλά μόνο αν είναι απενεργοποιημένη η javascript, δηλαδή
<? print "<script>document.write('...μέθοδος για javascript enabled')</script>
<noscript>...μέθοδος για javascript disabled</noscript>" ?>
Είναι μόνο καμιά 50ριά παραπάνω bytes στον HTML κώδικα και δεν είναι κουραστικό κατά τη συγγραφή σε php, αφού θα γίνεται από την dumpmail.

What says the master; χρήσιμη ή άχρηστη;

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Απόκρυψη διευθύνσεων email με JavaScript

Δημοσίευση από skeftomilos » 28 Οκτ 2006 16:50

Με το iframe είναι καλύτερα! Για τους χωρίς JavaScript χρήστες δε χρειάζεται να ασχοληθούμε πολύ. Είναι δεδομένο ότι απενεργοποιώντας τη JavaScript αποδέχονται μειωμένη λειτουργικότητα. Εφόσον τους δίνουμε το email έστω και με μορφή εικόνας ή γρίφου, μπορούμε να έχουμε τη συνείδησή μας ήσυχη.

Υπάρχει τρόπος να αλλάζουμε σελίδα χωρίς να προστίθεται στο History:

Κώδικας: Επιλογή όλων

window.frames&#91;'asdf'&#93;.location.replace&#40;'getemail.php?email=encrypted'&#41;
Όσο για το redirect το δοκίμασα με Response.Redirect (ASP). Ίσως να λειτουργεί διαφορετικά από το header("location").

Ακόμα κι αν δεν αποδειχτεί χρήσιμη, είναι καλή προσπάθεια πάντως! :)
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης