วิธีที่ดีที่สุดในการทำให้ยุ่งเหยิงที่อยู่อีเมลในเว็บไซต์หรือไม่


136

ฉันใช้เวลาสองสามวันในการปรับปรุงเว็บไซต์ส่วนตัวของฉัน URL ของเว็บไซต์ส่วนตัวของฉันคือ (ชื่อจริงของฉัน) (นามสกุลของฉัน) .com เนื่องจากนามสกุลของฉันค่อนข้างแปลกและฉันโชคดีพอที่จะรับชื่อโดเมน ที่อยู่อีเมลของฉันคือ (ชื่อจริง) @ (นามสกุลของฉัน) .com ดังนั้นเมื่อมีการคาดเดามันก็ไม่ยาก

อย่างไรก็ตามฉันต้องการรวม mailto: ลิงก์เข้ากับเว็บไซต์ของฉันเพื่อให้ผู้คนสามารถติดต่อฉันได้ และแม้ว่าที่อยู่อีเมลของฉันจะไม่คาดเดาได้ยาก แต่ฉันก็ไม่ได้เก็บข้อมูลจากสแปมบอทที่รวบรวมข้อมูลเว็บไซต์สำหรับรูปแบบที่อยู่อีเมลและเพิ่มไปยังฐานข้อมูลของพวกเขา

วิธีที่ดีที่สุดสำหรับฉันที่ทำให้งงงวยที่อยู่อีเมลของฉันโดยเฉพาะอย่างยิ่งในรูปแบบการเชื่อมโยงคืออะไร? วิธีการที่ฉันรู้คือ:

<a href="mailto:x@y.com">e-mail me</a>

ใช้งานได้ แต่ก็หมายความว่าทันทีที่เว็บไซต์ของฉันเข้าสู่ Google ฉันจะส่งสแปมโดยที่บอทสแปมเลือกที่อยู่อีเมลของฉันได้อย่างง่ายดาย

<img src="images/e-mail.png" />

สิ่งนี้เป็นที่พึงปรารถนาน้อยกว่าเพราะไม่เพียง แต่ผู้เข้าชมจะไม่สามารถคลิกเพื่อส่งอีเมลถึงฉันได้ แต่บอทสแปมที่ชาญฉลาดกว่าอาจสามารถตรวจจับตัวอักษรที่เป็นรูปภาพได้

ฉันรู้ว่าอาจไม่มีวิธีที่สมบูรณ์แบบ แต่ฉันแค่สงสัยว่าทุกคนคิดว่าอะไรดีที่สุด ฉันยินดีที่จะใช้ JavaScript หากจำเป็นเนื่องจากเว็บไซต์ของฉันใช้ประโยชน์ได้มากมาย


10
ส่งต่อข้อความไปยังบัญชี GMail ของคุณ ;-)
Dave Jarvis


โพสต์นี้ควรเชื่อมโยงที่นี่
Clément

คำตอบ:


106

ฉันเข้ารหัสอักขระเป็นเอนทิตี HTML ( บางอย่างเช่นนี้ ) ไม่ต้องการให้เปิดใช้งาน JS และดูเหมือนว่าจะหยุดสแปมส่วนใหญ่แล้ว ฉันคิดว่าสมาร์ทบ็อตอาจยังเก็บเกี่ยวได้ แต่ฉันไม่มีปัญหาใด ๆ


6
สิ่งนี้จะหยุดการรวบรวมสแปมบอทที่ง่ายที่สุด (regex มองหาข้อความใด ๆ ที่มีลักษณะและที่อยู่อีเมล) และไม่มีข้อเสีย: สะดวกสบายสำหรับผู้ใช้เช่นเดียวกับการเชื่อมโยง href = mailto: xxx @ yy
สตีเฟ่นซีเหล็ก

5
วิธีนี้ใช้งานได้ดีเพราะมีผู้รวบรวมข้อมูล / ผู้เก็บเกี่ยวจำนวนมากโง่อย่างไม่น่าเชื่อ
2552

43
จากการศึกษาเชิงประจักษ์จากปี 2008 การเข้ารหัส URL นั้นมีประสิทธิภาพน้อยที่สุด ข้อความธรรมดาเท่านั้นที่เลวร้ายยิ่ง
Fuhrmanator

16
ฉันรู้ว่ามันล่าช้า แต่ก็คุ้มค่าที่ชี้ให้เห็นว่าข้อเสนอแนะที่นี่คือการใช้เอนทิตี HTML ซึ่งแตกต่างจากการเข้ารหัส URL จากการศึกษาพบว่าการใช้เอนทิตีสำหรับ @ และจุดเป็นวิธีที่มีประสิทธิภาพมากที่สุดเป็นอันดับสอง (วิธีที่มีประสิทธิภาพมากที่สุดคือสามวิธีในการเชื่อมโยงก่อนเป็นอันดับแรก มันจะน่าสนใจที่จะดูว่าเรื่องนี้ยังคงถือเกือบ 6 ปีต่อมา
Bailey Parker

12
ฉันพบว่ามันน่าขันที่จะปกป้องอีเมลของคุณคุณต้องป้อนมันในรูปแบบสุ่มที่ดูร่มรื่นในไซต์ที่คุณเชื่อมโยง Honeypotting ทุกคน? :)
srobinson

84

ส่วนตัวฉันยอมแพ้ในการซ่อนที่อยู่อีเมลของฉัน ฉันคิดว่ามันง่ายกว่าที่จะดูวิธีแก้ปัญหาการกรองสแปมที่ดีกว่ากังวลกับการทำให้งงงวย คุณสามารถใช้เวลาหลายวันในการพยายามหาวิธีที่ดีที่สุดในการทำให้ที่อยู่ของคุณยุ่งเหยิงและจากนั้นสิ่งที่ต้องทำคือเพียงคนเดียวในการขายที่อยู่ของคุณให้กับผู้ส่งสแปมและงานทั้งหมดนั้นก็ไร้ประโยชน์


ไม่ว่าการกรองสแปมของคุณจะดีแค่ไหนก็จะมีการลบในทางที่ผิด (อีเมลที่ผ่านการดำเนินการที่ไม่ควรมี) ท้ายที่สุดคุณต้องอยู่กับที่อยู่อีเมล แต่ดูเหมือนว่าการเปิดรับที่ไม่จำเป็นประเภทนี้จะเพิ่มการกำเริบของสแปมที่จะเกิดขึ้นอีกครั้ง
แบรดบาร์เกอร์

8
@Brad ในประสบการณ์ของฉันนี้ไม่ได้เป็นกรณี ฉันใช้อีเมลที่โฮสต์โดย Google สำหรับโดเมนของฉันและที่อยู่อีเมลของฉันนั้นหาง่ายมาก ฉันมีเชิงลบที่เป็นเท็จ 0 รายการและเป็นบวกที่เป็นเท็จ 1 ตั้งแต่ฉันเริ่มใช้มันมากกว่า 14 เดือนที่ผ่านมา ฉันได้รับสแปมหลายร้อยต่อวันในโฟลเดอร์สแปมของฉัน
Rex M

8
เอ้อฉันควรเพิ่ม: สแปมไม่ใช่ boogeyman ที่จะกินลูกของคุณ การรับอีเมลขยะแปลก ๆ ไม่ใช่จุดสิ้นสุดของโลก คลิกที่ "รายงานสแปม" และไปต่อ
เปลือกตา

1
@Brad: ถ้ามันไม่จำเป็นอย่าให้ที่อยู่ของคุณเลย หากจำเป็นต้องแจ้งที่อยู่ของคุณให้เตรียมพร้อมสำหรับสแปม คุณไม่สามารถทำให้เป็นเรื่องง่ายสำหรับคนที่จะส่งอีเมลถึงคุณโดยไม่ต้องทำให้มันง่ายสำหรับสแปมบอท
Chuck

1
ฉันเพิ่งโพสต์อีเมลของฉันโดยไม่ทำให้รู้สึกรำคาญเช่นกัน ฉันใช้ gmail และตัวกรองสแปมทำงานได้ดีอย่างน่าทึ่ง
Asmor

68

โซลูชันที่ยอมรับในปัจจุบันคือการสร้างแบบฟอร์มการติดต่อที่อนุญาตให้ผู้ใช้ส่งอีเมลถึงคุณ หากคุณได้รับจดหมายขยะจำนวนมากจากนั้น (ฉันไม่ได้อยู่ในเว็บไซต์ของฉัน) คุณสามารถเพิ่ม captcha เพื่อวัดผลที่ดีและคุณจะห่างไกลจาก "ผลไม้แขวนลอยต่ำ" ณ จุดนั้น

ข้อเท็จจริงของเรื่องคือถ้าคุณให้ลิงค์ที่ผู้ใช้สามารถคลิกเพื่อเปิดไคลเอนต์อีเมลของพวกเขาด้วยที่อยู่ของคุณในฟิลด์ถึง: จากนั้นคอมพิวเตอร์จะสามารถถอดรหัสที่อยู่อีเมลจากหน้าและสามารถ บอทสแปม


2
กล่าวคือตรรกะในการส่งอีเมลควรเขียนในรหัสฝั่งเซิร์ฟเวอร์ที่ซ่อนไว้เพื่อไม่ให้ที่อยู่นั้นถูกเปิดเผยสู่สาธารณะ
JoshJordan

8
ในขณะที่มันเป็นโซลูชั่นที่ดีในทางเทคนิคมันเป็นวิธีแก้ปัญหาที่ขัดแย้งกับผู้ใช้หลายคน เพียงแค่พูดว่า
เปลือกตา

คุณพูดถูก แต่ฉันไม่เคยเข้าใจว่าทำไม ที่ส่วนใหญ่คุณเป็นหนึ่งคลิกออกจากเว็บฟอร์มเช่นเดียวกับคุณจะเป็นที่ต่ำสุดกับลูกค้าอีเมล สิ่งเดียวที่เพิ่มความยากคือแคปช่าเสริม หากผู้ใช้ไม่สามารถติดต่อคุณได้ข้อความของพวกเขาสำคัญหรือไม่
JoshJordan

15
ฉันชอบมันเสมอเมื่อมีตัวเลือกให้คุณส่งข้อความถึง CC สิ่งหนึ่งที่ทำให้ฉันรำคาญใจเกี่ยวกับแบบฟอร์มการติดต่อคือมันไม่มีบันทึกในระบบอีเมลของฉันเอง (แม้ว่ารูปแบบที่ CCs ที่อยู่อีเมลใด ๆ ที่สามารถสร้างมันเป็นชุดของตัวเองของปัญหา.)
แซมเลอร์

6
นอกจากนี้ยังไม่มีข้อบ่งชี้ว่าแบบฟอร์มอีเมลใช้งานได้จริง ฉันเห็นมากเกินไปที่แตกอย่างเงียบ ๆ อีเมลจริงเด้งอย่างน้อย
Brian Carper

44

คุณพูดถึงสิ่งนี้สำหรับเว็บไซต์ส่วนตัวของคุณ ในเว็บไซต์ส่วนตัวของฉัน (ตัวอย่างเช่น bobsomers.com) ฉันมีย่อหน้าที่บอกสิ่งนี้:

วิธีที่ดีที่สุดในการติดต่อกับฉันก่อนที่ไซต์ใหม่จะเปิดให้ส่งอีเมลถึงฉัน ที่อยู่อีเมลของฉันคือชื่อของฉันที่เว็บไซต์นี้ หากคุณไม่สามารถเข้าใจได้จากคำใบ้นั้นคุณอาจพบว่าอีเมลมีความท้าทายมากกว่าการหาที่อยู่ของฉัน

ผู้คนดูเหมือนจะสามารถเข้าใจสิ่งนั้นได้ดีเพราะฉันได้รับอีเมลที่ถูกต้องตลอดเวลา บางครั้งโซลูชันที่ดีที่สุดไม่จำเป็นต้องเขียนโค้ดใด ๆ :)


7
วิธีนี้ยังกรองคนที่มี IQ ต่ำกว่าระดับหนึ่งด้วย: D
papa zulu

36

reCAPTCHAมีง่ายบริการ obfuscation อีเมล คุณไม่จำเป็นต้องตั้งค่าบัญชีและสามารถเริ่มใช้งานได้ทันที คุณสามารถใช้บริการเป็นลิงค์หรือเป็นป๊อปอัพ

หลังจากแก้ไข captcha แล้วที่อยู่อีเมลของคุณจะปรากฏเป็น href / mailto เพื่อให้สามารถคลิก / ติดตามโดยผู้ใช้ที่กำหนดค่าไคลเอนต์อีเมลของตนให้ทำงานกับเบราว์เซอร์


นี่เป็นสิ่งที่ยอดเยี่ยมและจะทำงานได้ 99.9% ของเวลา ขอบคุณสำหรับลิงค์ มันจะล้มเหลวเมื่อบอทกำลังเบราว์เซอร์อัตโนมัติ
IEnumerator

9
ฉันไม่คิดว่าผู้ใช้เว็บส่วนใหญ่จะใช้ความพยายามในการแก้แคปต์ชาเพื่อส่งอีเมลถึงใครบางคน
AndyM

7
ฉันอยู่กับแอนดี้กับสิ่งนี้ CAPTCHA เป็นความเจ็บปวดและ reCAPTCHA เป็นความเจ็บปวดที่ยิ่งใหญ่กว่าค่าเฉลี่ยเนื่องจากมักจะอ่านยากเกินไป หากผู้คนที่ส่งอีเมลถึงคุณเป็นจุดแปลง (เช่นอนุญาตให้ลูกค้าสอบถามเกี่ยวกับบริการสั่งซื้อหรือขอใบเสนอราคา) คุณต้องการทำให้เป็นเรื่องง่ายที่สุดเท่าที่จะทำได้
Sylverdrag

8
บริการไม่มีอีกต่อไป
sorin

Google Mailhide ถูกยกเลิกตั้งแต่วันที่ 31 มีนาคม 2018
sean

18

วิธีที่มีน้ำหนักเบาเพื่อทำให้งอhrefสมอยุ่งเหยิงคือการเข้ารหัส base64:

> btoa('mailto:email@example.com')
< "bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t"

แล้วรวมมัน hardcoded:

<a href="javascript:window.location.href=atob('bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t')">E-Mail</a>

หรือฝั่งเซิร์ฟเวอร์แบบไดนามิกเช่นใน PHP:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')">E-Mail</a>

เมื่อใช้ร่วมกับการพลิกกลับสตริงอาจเป็นการประหยัดสแปม:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')" style="unicode-bidi: bidi-override; direction: rtl;"><?= strrev("email@example.com") ?></a>

14

เห็นได้ชัดว่าการใช้ CSS เพื่อเปลี่ยนทิศทางของข้อความของคุณทำงานได้ดี ลิงค์นั้นมีการทดสอบวิธีการทำให้งงมากมายอื่น ๆ เช่นกัน

สิ่งที่คุณใช้ย่อมจะพ่ายแพ้อย่างหลีกเลี่ยงไม่ได้ เป้าหมายหลักของคุณควรหลีกเลี่ยงการสร้างความรำคาญให้กับผู้ใช้ของคุณ


4
สิ่งนี้คัดลอกและวางอาจจะ? IIRC
alex

7
เมื่อที่อยู่ถูกคัดลอกแล้วจะปรากฏขึ้นข้างหลัง การทำเช่นนี้อาจเป็นการทำให้ผู้ใช้ไม่พอใจถ้าคุณต้องการให้มันง่ายที่สุดในการติดต่อคุณ
Christian Davén

10

อย่าใช้เทคนิคการทำให้งงงวยใด ๆ ที่นี่เพราะอาจเป็นที่แรกที่ผู้เก็บเกี่ยวอีเมลจะมองหาว่าผู้คนสับสนกับอีเมลอย่างไร หากคุณต้องให้ที่อยู่อีเมลของคุณปรากฏบนเว็บไซต์ไม่เพียงคัดลอกคำต่อคำของคนอื่น ทำให้งงงวยด้วยวิธีเฉพาะที่ไม่เคยมีใครใช้มาก่อนเพื่อไม่ให้คนรู้จักวิธีการของคุณก่อนที่พวกเขาจะเยี่ยมชมเว็บไซต์ของคุณ


8
ซ้ำซากแค่ไหน
Paul Tomblin

ไม่ถูกต้อง: คำตอบของแซม Hasler มีผลบังคับใช้ไม่ว่าคำตอบยอดนิยมคืออะไร ด้วยการใช้เทคนิคทำให้งงงวยที่นิยมมากที่สุดคุณจะไปกับเป้าหมายที่เป็นไปได้มากที่สุดของการเก็บเกี่ยว
เปลือกตา

เว้นแต่คำตอบด้านบนคือการไม่ใช้ obfuscation จริง :)
469 JoshJordan

@JoshJordan: ตกลงฉันลงคะแนนให้จริงสำหรับคำตอบของคุณ ประเด็นของฉันคือผู้ส่งอีเมลขยะเทคนิคที่เป็นที่นิยมในที่สุดก็จะสังเกตเห็นและพวกเขาจะเขียนรหัสเพื่อ deobfuscate มัน
Sam Hasler

2
ขณะนี้หน้านี้เป็นผลลัพธ์ที่ 28 จาก google สำหรับ [obfuscate ที่อยู่อีเมล] แม้ว่าฉันจะคาดหวังว่ามันจะสูงขึ้นในที่สุด
Sam Hasler

8

คุณสามารถทำเช่นเดียวกับ Google ทำใน Google Code (และกลุ่ม) แสดงอีเมลและส่วนที่สามารถคลิกได้ ("... ") การคลิกที่ระบุว่าคุณต้องการทราบอีเมลและระบบจะขอให้คุณกรอก captcha หลังจากนั้นอีเมล (และอื่น ๆ ) จะปรากฏให้คุณเห็น


8

จริงๆแล้วฉันเป็นเรื่องง่าย:

<h3 id="email">hello@gmail.com</h3><!-- add a fake email -->


    $(document).ready(function(){
//my email in reverse :)
            var s = 'moc.elibomajninbew@htiek';
            var e = s.split("").reverse().join("");
            $('#email').html('<a href="mailto:'+e+'">'+e+'</a>');
    });

9
คนที่น่าสงสารซึ่งเป็นเจ้าของ hello@gmail.com :)
duedl0r

2
ไม่มีอีเมลใน Gmail ที่มี 5 ตัวอักษร
เปาโล Ney

6

ฉันใช้ JavaScript obfuscation ลองดูที่ตัวอย่างนี้:

http://www.jottings.com/obfuscator/


2
-1: คุณดูโค้ดที่สร้างขึ้นหรือไม่ ที่จริงมันไม่ทำให้งงงวยที่อยู่อีเมลของคุณหากคุณรวมไว้ใน "ลิงค์ข้อความ" และปฏิเสธวัตถุประสงค์ด้วย "mailto:" ที่แย่กว่านั้นคือโซลูชันที่ต้องใช้ Javascript ซึ่งไม่ควรเชื่อถือสำหรับเนื้อหาพื้นฐาน
เปลือกตา

6

เว็บไซต์หนึ่งที่ฉันบำรุงรักษาใช้ JavaScript ที่ค่อนข้างเรียบง่ายหมายถึง (หวังว่า) จะทำให้สแปมบอทหมดไป

ลิงก์อีเมลเรียกใช้ฟังก์ชัน JS:

ฟังก์ชั่น sendEmail (ชื่อโดเมน) {
    location.href = 'mailto:' + ชื่อ + '@' + โดเมน;
}

เพื่อให้แน่ใจว่ามีเพียงผู้ใช้ที่เปิดใช้งาน JS เท่านั้นที่สามารถเห็นลิงก์เขียนพวกเขาด้วยสิ่งนี้:

ฟังก์ชั่น writeEmailLink (ชื่อจริง, ชื่อ, โดเมน) {
    document.write ('<a href = "จาวาสคริปต์: sendEmail (\' '
      + ชื่อ + '\', \ '' + โดเมน + '\') "> ');
    document.write (realName);
    document.write ( '</a>');
}   

การใช้หนึ่งฟังก์ชัน JS เพื่อเขียนลิงก์ที่เรียกอีกวิธีหนึ่งหมายความว่ามีการป้องกันสองชั้น


4

ในฐานะที่เป็นโปสเตอร์ดังกล่าวข้างต้นผมยังใช้ obfuscation JavaScript จากเว็บไซต์ข้อความสั้น

หน้าเว็บสร้าง JavaScript บางอย่างซึ่งสามารถปรับปรุงได้ mailto:สตริงข้อความที่อยู่ในที่ชัดเจนและสามารถระบุตัวตนโดยหุ่นยนต์ (ซึ่งอาจจุดนี้และ unobfuscate สายนี้) แต่ถ้าหนึ่งเข้าสู่ jottings.com หน้าเว็บที่อยู่อีเมลของรูปแบบmailto:addr@site.tldแทนaddr@site.tldแล้วเอาข้อความmailto:จากจาวาสคริปต์ที่สร้างขึ้นจู่ๆก็มีจาวาสคริปต์บางอย่างที่ดูไม่เหมือนกับว่ามันเกี่ยวกับอีเมลเลย - เพียงแค่สุ่มจาวาสคริปต์ที่เว็บเต็ม หนึ่งสามารถปรับปรุงนี้ยังคงเพิ่มเติมโดยการกำจัดข้อความลิงค์ - ฉันแทนที่ฉันด้วยภาพของที่อยู่อีเมลของฉันที่อยู่ในแบบอักษรที่ค่อนข้างคลุมเครือ จากนั้นในกรณีที่วิธีการนี้บน jottings.com กลายเป็นที่นิยมฉันจะสุ่มชื่อตัวแปรใน JavaScript เอาท์พุทเพื่อให้เป็นเรื่องยากสำหรับหุ่นยนต์ที่จะสังเกตเห็นอินสแตนซ์ของ jottings สร้างรหัส JavaScript

เห็นได้ชัดว่าการปรับปรุงเหล่านี้บางอย่างอาจถูกสร้างขึ้นในกลไกของข้อความสั้น ๆ และเนื่องจากรหัสมีให้บริการอย่างเปิดเผยสิ่งนี้จึงค่อนข้างง่าย

ตัวอย่างอาจทำให้ชัดเจนกว่านี้เล็กน้อย ฉันใช้ Jottings Obfuscator ที่ลิงก์ด้านบนเพื่อปิดบังmailto:foo@bar.com(หมายเหตุฉันกำลังโกงความตั้งใจดั้งเดิมของเว็บไซต์ jottings โดยป้อนสตริงmailto:foo@bar.comแทนfoo@bar.com) ด้วยข้อความ "ส่งอีเมลฉัน" ซึ่ง jottings กลายเป็น Javascript นี้:

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption key feature by Andrew Moulden, Site Engineering Ltd
// This code is freeware provided these four comment lines remain intact
// A wizard to generate this code is at http://www.jottings.com/obfuscator/
{ coded = "3A1OTJ:rJJ@VAK.GJ3"
  key = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
  shift=coded.length
  link=""
  for (i=0; i<coded.length; i++) {
    if (key.indexOf(coded.charAt(i))==-1) {
      ltr = coded.charAt(i)
      link += (ltr)
    }
    else { 
      ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length
      link += (key.charAt(ltr))
    }
  }
document.write("<a href='mailto:"+link+"'>Send Me Email</a>")
}
//-->
</script><noscript>Sorry, you need Javascript on to email me.</noscript>

หลังจากได้กลับมาฉันจะวางลงในโปรแกรมแก้ไขและ:

  1. ลบ mailto:
  2. แทนที่ข้อความลิงค์ด้วยตัวชี้เป็นภาพของที่อยู่อีเมลของฉัน
  3. เปลี่ยนชื่อตัวแปรทั้งหมด
  4. แทนที่ส่วน "noscript" ด้วยลิงค์อื่นไปยังภาพที่อยู่อีเมล

ฉันจบลงด้วยสิ่งนี้:

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption kkeoy feature by Andrew Moulden, Site Engineering Ltd
// This kudzu is freeware provided these four comment lines remain intact
// A wizard to generate this kudzu is at http://www.jottings.com/obfuscator/
{ kudzu = "3A1OTJ:rJJ@VAK.GJ3"
  kkeoy = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
  shift=kudzu.length
  klonk=""
  for (variter=0; variter<kudzu.length; variter++) {
    if (kkeoy.indexOf(kudzu.charAt(variter))==-1) {
      lutu = kudzu.charAt(variter)
      klonk += (lutu)
    }
    else {
      lutu = (kkeoy.indexOf(kudzu.charAt(variter))-shift+kkeoy.length) % kkeoy.length
      klonk += (kkeoy.charAt(lutu))
    }
  }
document.write("<a href='"+klonk+"'><img src='contactaddressimage.png' alt='Send Me Email' border='0' height='62' width='240'></a>")
}
//-->
</script>
<noscript>
    <img src="contactaddressimage.png" border="0" height="62" width="240">
    <font face="Arial" size="3"><br>&nbsp;</font></p>
</noscript>

3

ฉันทำงานได้ไม่ดีเท่านี้ คุณไม่สามารถปล่อยที่อยู่อีเมลของคุณออกและทำการโหลดโดยใช้การโทร AJAX เมื่อหน้าโหลดเสร็จแล้ว ไม่แน่ใจว่าบอทสแปมสามารถรับ HTML ที่มีการเปลี่ยนแปลงหรือหากพวกเขาฉลาดพอที่จะรับฟังการรับส่งข้อมูล HTTP อื่น ๆ เพื่อลองและเลือกที่อยู่อีเมลหรือหากพวกเขาเพียงแค่สแกนหน้าเว็บตามที่ได้รับครั้งแรก


เวลาที่ใช้ในการใช้งานการโหลดอีเมล AJAX: 3 วัน เวลาที่บันทึกไว้ในจดหมายขยะคุณไม่ต้องลบ: 17 นาที

2

ผู้ชายคนหนึ่งทดสอบวิธีที่แตกต่างกันเก้าวิธีในการนำเสนอที่อยู่อีเมลบนหน้าเว็บจากนั้นเผยแพร่ผลลัพธ์ในบล็อกของเขา

สามวิธีที่ดีที่สุดของเขาคือ:

  1. เปลี่ยนทิศทางรหัสด้วย CSS
  2. ใช้การแสดง CSS: ไม่มี
  3. การเข้ารหัส ROT13

Caveat - โพสต์นี้เมื่อสองปีก่อน บอทสแปมอาจจะฉลาดขึ้น


1

ถ้าคุณทำงานกับ PHP คุณสามารถคว้าสคริปต์ฟรีที่ทำงานโดยอัตโนมัติ มันเรียกว่า "Private Daddy" และเราใช้สำหรับบริการสตรีมมิ่งเสียงออนไลน์ของเราเอง เพียงหนึ่งบรรทัดของรหัสและมันทำงานนอกกรอบ ... คุณสามารถคว้ามันได้ที่นี่


ฉันต้องการที่จะรู้ว่าทำไมบางคนลงคะแนนนี้ มันจะเป็นประโยชน์ในการอธิบาย
Yannis Dran

1

วิธีการอื่นอาจทำได้โดยใช้เฟรมเวิร์ก JavaScript และผูกข้อมูล / โมเดลเข้ากับองค์ประกอบ HTML ในกรณีของ AngularJS องค์ประกอบ HTML จะถูกเขียนเป็น:

<a href="mailto:{{contactEmail}}"><span>{{contactEmail}}</span></a>

การสอดแทรกการแก้ไข {{data}} ใช้ตัวแปรขอบเขตที่มีค่าอีเมลจริง นอกจากนี้ยังสามารถใช้ตัวกรองที่จัดการการถอดรหัสอีเมลดังต่อไปนี้:

<a href="mailto:{{contactEmail | decode}}"><span>{{contactEmail | decode}}</span></a>

ประโยชน์อยู่ที่การเขียน HTML ข้อเสียคือต้องใช้การสนับสนุนสคริปต์ซึ่งบางอย่างอาจไม่เป็น

อีกวิธีหนึ่ง


1

ใช้ JQuery แต่สามารถย้ายไปยัง JS ธรรมดาได้อย่างง่ายดายหากต้องการ จะใช้บล็อก HTML ต่อไปนี้ ตัวอย่างที่ฉันให้ไว้นี้มีไว้สำหรับtel:ลิงก์สำหรับโทรศัพท์ด้วย

<a class="obfuscate" 
 href="mailto:archie...trajano...net">
 archie...trajano...net
</a>
<a class="obfuscate"
 href="tel:+One FourOneSix-EightFiveSix-SixSixFiveFive">
 FourOneSix-EightFiveSix-SixSixFiveFive
</a>

และแปลงเป็นลิงก์ที่เหมาะสมโดยใช้ Javascript

$ (". obfuscate"). แต่ละอัน (function () {

$ (นี้) .html ($ (นี้) .html ()
.replace ("... ", "@") แทนที่ (/\.\.\./ g, ".")
.replace (/ หนึ่ง / g, "1")
.replace (/ สอง / g, "2")
.replace (/ สาม / g, "3")
.replace (/ สี่ / g, "4")
.replace (/ ห้า / g, "5")
.replace (/ หก / g, "6")
.replace (/ เจ็ด / g, "7")
.replace (/ แปด / g, "8")
.replace (/ เก้า / g, "9")
.replace (/ ศูนย์ / g, "0"))

$ (นี่) .attr ("href", $ (นี้) .attr ("href")
.replace ("... ", "@") แทนที่ (/\.\.\./ g, ".")
.replace (/ หนึ่ง / g, "1")
.replace (/ สอง / g, "2")
.replace (/ สาม / g, "3")
.replace (/ สี่ / g, "4")
.replace (/ ห้า / g, "5")
.replace (/ หก / g, "6")
.replace (/ เจ็ด / g, "7")
.replace (/ แปด / g, "8")
.replace (/ เก้า / g, "9")
.replace (/ ศูนย์ / g, "0"))

})

ฉันบันทึกรายละเอียดไว้ที่นี่แล้วhttps://trajano.net/2017/01/obfuscating-mailto-links/

อัลกอริธึม de / obfuscation นั้นค่อนข้างง่ายดังนั้นจึงไม่ต้องเสียภาษีในการเขียน (ไม่จำเป็นต้องแยก base64)


1

โซลูชันโทร Ajax

วิธีที่ดีที่สุดคือการมีแบบฟอร์มบนเว็บไซต์และไม่แสดงที่อยู่อีเมลเนื่องจากหุ่นยนต์ทั้งหมดนั้นฉลาดมากขึ้นทุกวัน แต่ถ้าคุณต้องการแสดงที่อยู่อีเมลบนเว็บไซต์ดังนั้นคุณสามารถโทรด้วย ajax ได้ เซิร์ฟเวอร์และแสดงเมื่อคลิก

HTML

<a class="obfmail" href="#" rel="info">click here to show email address</a>

หรือ

<a class="obfmail" href="#" rel="info">
    <img src="img/click-to-show-email.jpg">
</a>

jQuery

$(document).one'click', '.obfmail', function(e) {
    e.preventDefault();
    a = $(this);
    addr = a.attr('rel');
    $.ajax({
        data: { 
            email: addr
        },
        url : "/a/getemail",
        type: "POST",
        dataType: 'json',
        success: function(data) {
            a.html(data.addr);
            a.attr('href', 'mailto:' + data.addr);
        }
    });
});

PHP

if($_POST['email']) {
    ...
    return json_encode(array(
        code     => '200',
        response => 'success',
        addr     => 'info@domain.ltd'
    ));
}

เพื่อความปลอดภัยมากขึ้นคุณสามารถเปลี่ยนได้.onโดยใช้.oneสิ่งนี้$(document).one('click', '.obfmail', function(e) {หรือแม้แต่ทำงานกับโทเค็น PHP ที่สร้างขึ้นซึ่งคุณส่งผ่านข้อมูลในการโทร ajax เพื่อรับฟังก์ชั่น ajax เพียงสายเดียว:

HTML: <a class="obfmail" href="#" rel="info" token="w3487ghdr6rc">

jQuery:

...
addr = a.attr('rel');
tkn  = a.attr('token');
$.ajax({
    data: { 
        email: addr,
        token: tkn
    }, ...

.

มีความเป็นไปได้ที่จะเข้ารหัสที่อยู่อีเมลที่ส่งคืนด้วย

.

ทำงานได้ดีสำหรับหมายเลขโทรศัพท์ด้วย!


0

สุจริตปัญหาของคุณอาจสงสัยหากคุณถามคำถามว่า mailto เป็นสิ่งที่คุณต้องการใช้จริงหรือไม่ ผู้คนจำนวนมากที่ใช้เว็บเมลตัวอย่างเช่นหรือไม่มีการตั้งค่าโปรแกรมรับส่งเมลที่เหมาะสมในเบราว์เซอร์ของพวกเขาจะไม่ได้รับประโยชน์จาก mailto คุณกำลังเปิดเผยที่อยู่อีเมลของคุณสำหรับฟังก์ชั่นที่จะไม่ทำงานสำหรับผู้ใช้ส่วนใหญ่ของคุณ

สิ่งที่คุณสามารถทำได้คือใช้แบบฟอร์มเพื่อส่งอีเมลเบื้องหลังเพื่อให้ที่อยู่อีเมลถูกซ่อนอยู่และคุณไม่ต้องกังวลเกี่ยวกับ saps ที่ไม่ดีซึ่งจะไม่ได้รับประโยชน์จาก mailto


0

หากคุณพูดในเว็บไซต์ของคุณว่า "ที่อยู่อีเมลของฉันคือ (ชื่อจริงของฉัน) @ (นามสกุลของฉัน). com." และชื่อและนามสกุลของคุณจะค่อนข้างชัดเจนว่าน่าจะเป็นการป้องกันสแปมที่ดีที่สุด คุณจะได้รับ


ไม่อนุญาตให้ใช้วงเล็บในอีเมลแบบเต็มรูปแบบใช่หรือไม่ ดูเหมือนว่าอาจเป็นที่อยู่อีเมลที่ถูกต้อง : p
Kzqai

1
อีกเหตุผลหนึ่งที่บอทสแปมจะพลาดกล่องจดหมายของคุณ :-)
Dean J

0

หากใครใช้ Rails พวกเขาสามารถใช้actionview-encoded_mail_toอัญมณีได้ ( https://github.com/reed/actionview-encoded_mail_to )

มีตัวเลือกน้อย:

: encode - คีย์นี้จะยอมรับสตริง "javascript" หรือ "hex" การส่งผ่าน "javascript" จะสร้างและเข้ารหัสลิงก์ mailto แบบไดนามิกจากนั้นประเมินผลเป็น DOM ของหน้าเว็บ วิธีนี้จะไม่แสดงลิงค์ในหน้าหากผู้ใช้ปิดการใช้งาน JavaScript ผ่าน "hex" จะ hex เข้ารหัส email_address ก่อนที่จะส่งออกลิงค์ mailto

: replace_at - เมื่อไม่มีการระบุชื่อลิงก์ email_address จะใช้สำหรับป้ายกำกับลิงก์ คุณสามารถใช้ตัวเลือกนี้เพื่อทำให้งงงวย email_address โดยการแทนที่เครื่องหมาย @ ด้วยสตริงที่กำหนดเป็นค่า

: replace_dot - เมื่อไม่มีการระบุชื่อลิงก์ email_address จะใช้สำหรับป้ายกำกับลิงก์ คุณสามารถใช้ตัวเลือกนี้เพื่อทำให้งงงวย email_address โดยการแทนที่ ในอีเมลที่มีสตริงที่กำหนดเป็นค่า


0
<!-- Multi-Email Obfuscator  -->
<!-- step 1: &#064; = @  -->
<!-- step 2: a scrap element  -->
<!-- step 3: ROT13 encode for .com  -->
info<!-- step 1 -->&#064;<!-- step 2 --><b style="display:none">my</b>domain<!-- step 3 --><script>document.write(".pbz".replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));</script>


0

เนื่องจากวิธีนี้ไม่ได้กล่าวถึงที่ใดก็ได้ แต่ใช้งานได้ดีสำหรับฉัน:

ฉันทำนี่:

  • สร้างลิงก์ mailto ด้วยอีเมลปลอม ฉันชอบ admin@localhost.localdomain ด้วยเหตุผลที่ชัดเจน: ผู้ส่งสแปมอาจสแปมบอทเน็ตของเขาเมื่อใช้ที่อยู่นี้โดยไม่ได้ตรวจสอบ

  • ที่อยู่อีเมลจริงของ cypher และใส่ไว้ในช่วงซ่อนเร้นที่ไม่เกี่ยวข้อง แต่หาได้หรือองค์ประกอบอะไรก็ได้ที่คุณชอบ เห็นได้ชัดว่าทำให้สับสนอีเมล์และซ่อนไว้จากการเก็บเกี่ยว ขึ้นอยู่กับโครงสร้างโครงการของคุณคุณอาจต้องการวางไว้ในตัวแปร JS หรือเซสชัน

  • สร้างตัวจัดการคลิกสำหรับลิงก์เหล่านี้หลังจากวินาทีที่ถอดรหัสและเขียนที่อยู่อีเมลที่ถูกต้องลงในลิงค์ mailto ปลอมไม่ป้องกันค่าเริ่มต้น ฉันไม่คิดว่าซอฟต์แวร์รวบรวมข้อมูลคลิกที่ลิงก์ mailto แต่ถ้าต้องการพวกมัน probaby จะไม่รอที่สองในขณะที่มนุษย์จะต้องคลิกลิงค์ในวินาทีแรกหลังจาก pageload

ตอนนี้คุณมีลิงก์ mailto ที่ใช้งานได้อย่างสมบูรณ์ แต่ obfuscated, honeypoted และปลอดภัย

ตัวอย่างไฟล์ php ที่ทำงาน:

<html>
<head>
<title>E-Mail Obfuscating</title>
</head>
<body>
<?php
$email = "example@email.org";
echo "<a class='emailLink' href='mailto:admin@localhost.localdomain' >Send me an e-mail!</a>"
    ."<span style='display:none' data-hash='" . base64_encode($email) . "' />";
?>
<script>
<!--
var emailLinks = document.getElementsByClassName("emailLink");
setTimeout(function() {
    for(var i=0; i <emailLinks.length; ++i){
        emailLinks[i].addEventListener("click", function(){
            let encodedEmail = this.nextSibling.getAttribute('data-hash');
            let decodedEmail = atob(encodedEmail);
            this.href = "mailto:" + decodedEmail;
            this.text = decodedEmail;
        });
    }
}, 1000);

-->
</script>
</body>
</html>

ขอให้รหัสอยู่กับคุณ


0

จะเกิดอะไรขึ้นถ้าสร้างลิงก์ "ติดต่อฉัน" ที่ชี้ไปยังไดเรกทอรีที่ป้องกันด้วยรหัสผ่าน แน่นอนคุณต้องให้รหัสผ่านเพื่อเข้าถึง

"ติดต่อฉัน"> •••••••••••> ติดต่อ / index.html

เมื่อเข้าถึงแล้วหน้า contact / index.html จะเปิดเผยอีเมลและ mailto เป็นต้น


-1

ฉันใช้ฟังก์ชั่น PHPในการสร้างจาวาสคริปต์เพื่อส่งออกอีเมลเมื่อโหลดหน้าเว็บ โปรดทราบว่าคุณไม่ต้องการ PHP เพื่อสร้าง JS เมื่อรันไทม์คุณสามารถสร้าง JS ได้ครั้งเดียวในเครื่องจากนั้นรวม JS แบบคงที่ในหน้าของคุณ

คุณสามารถใช้ฟังก์ชั่นที่เชื่อมโยงกับตัวอย่างนี้ด้านล่างเพื่อทำให้ยุ่งเหยิงที่อยู่อีเมลโดยอัตโนมัติในบาง HTML ที่กำหนด (โดยที่ $processContent คือ HTML):

 $emailMatches = array();
 $matchCount = preg_match_all('/(?:[a-zA-Z0-9_\.\-])+\@(?:(?:[a-zA-Z0-9\-])+\.)+(?:[a-zA-Z0-9]{2,4})+/', $processedContent, $emailMatches);

 if($matchCount > 0) {
    $emailMatches = $emailMatches[0];

    foreach($emailMatches as $email) {
    $replacement = createJSMailLink($email);

    $processedContent = str_replace($email, createJSMailLink($email), $processedContent);
 }

คุณกำหนด createJSMailLink () ไว้ที่ไหน
เลียน

-2

ตรวจสอบนี้ออก

'แบบฟอร์ม Enkoder' จะเข้ารหัสที่อยู่อีเมลของคุณและแปลงผลลัพธ์เป็น JavaScript ประเมินตนเองซ่อนจากหุ่นยนต์เก็บเกี่ยวอีเมลซึ่งจะรวบรวมข้อมูลจากเว็บเพื่อค้นหาที่อยู่ที่เปิดเผย ที่อยู่ของคุณจะแสดงอย่างถูกต้องโดยเว็บเบราว์เซอร์ แต่แทบจะไม่สามารถถอดรหัสได้สำหรับหุ่นยนต์เก็บเกี่ยวอีเมล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.