Bảo vệ địa chỉ email bằng SVG thay vì JavaScript
(rouninmedia.github.io)- Để vừa ẩn địa chỉ email công khai khỏi bot thu thập spam mà vẫn cho phép khách truy cập liên hệ ngay, phương pháp này đặt văn bản email và liên kết
mailto:bên trong SVG - Cách bảo vệ dựa trên JavaScript có thể tinh vi hơn, nhưng việc chức năng liên hệ tự thân mang phụ thuộc vào JS là một điểm bất tiện
- Cách tiếp cận này nhúng tài liệu SVG bên ngoài vào HTML bằng thẻ
object, và đặt liên kết thực sự trong phần tửabên trong SVG chứ không phải trong HTML - SVG vừa có tác dụng che giấu nội dung như một hình ảnh, vừa cho phép khách truy cập sao chép địa chỉ email nhờ dùng phần tử
text - Đây không phải giải pháp ngăn chặn được cả những bot spam tinh vi, nhưng hữu ích để giảm rủi ro bị lộ cho các script thu thập email đơn giản
Cách ẩn địa chỉ email bằng SVG
- Địa chỉ email công khai rất dễ bị bot spam thu thập email phát hiện, nên cần có biện pháp bảo vệ
- Các kỹ thuật bảo vệ phổ biến thường kết hợp HTML, CSS và JavaScript, nhưng khi dùng JavaScript thì chức năng liên hệ sẽ bị ràng buộc với môi trường thực thi bắt buộc của trang
- Cách dùng SVG xử lý cả việc hiển thị email lẫn hoạt động của liên kết mà không cần dùng JavaScript
- Ngay cả khi JavaScript bị tắt, khách truy cập vẫn có thể dùng địa chỉ email hiển thị trên trang, đồng thời bot spam cũng khó tiếp cận trực tiếp hơn so với văn bản HTML thông thường
- Giống như các kỹ thuật bảo vệ dựa trên frontend khác, cách này không thể bảo vệ hoàn toàn địa chỉ email công khai trước những bot spam dai dẳng và tinh vi
- Demo trực tiếp: SVG-based Email Protection
Triển khai HTML và SVG
- Tài liệu HTML nhúng tệp SVG bên ngoài bằng thẻ
object
- Cùng một tài liệu đồ họa SVG có thể được nhúng một hoặc nhiều lần trong HTML
- Ví dụ HTML đặt các kiểu
width: 180px,height: 24px,vertical-align: middlecho lớp.svg-email-protection, rồi tải tệp SVG bằng thẻobjecttrong nội dung chính - Tệp SVG là một tài liệu
svgcóviewBox="0 0 200 24", bên trong chứa văn bản email và liên kếtmailto:myemail@mydomain.tld- Bên trong
acórectvàtext texthiển thịmyemail@mydomain.tld- Ở trạng thái
rect:hovervàa:focus, kiểu màu nền, màu chữ, độ đậm, gạch chân và đổ bóng sẽ thay đổi
- Bên trong
Khả năng truy cập và tài liệu tham khảo
- Toàn bộ tài liệu SVG dùng
aria-labelledbytrỏ tớititle, cònabên trong SVG cóaria-labelchứa cùng lời kêu gọi hành động - Khi tiêu điểm tab bằng bàn phím đến liên kết neo bên trong SVG, cả
rectvàtextsẽ được làm nổi bật để thể hiện trạng thái focus - Tài liệu liên quan:
1 bình luận
Ý kiến trên Hacker News
Tôi không chắc có thật vậy không
Nhưng cá nhân tôi thấy từ khoảng năm 2015 thì hoàn toàn không còn khác biệt, thậm chí lượng spam cần lọc cũng không tăng
Giờ đây các công ty có thể bán danh sách người dùng, hoặc người ta có thể mua những danh sách email khổng lồ rò rỉ từ máy chủ bị hack, nên việc quét web để thu thập email gần như là cách gửi spam kém hiệu quả nhất
Cả hai site đều có vài nghìn lượt truy cập và là các site phổ biến được công cụ tìm kiếm lẫn bot AI thu thập dữ liệu
Địa chỉ email đưa lên website thì thậm chí còn không có thư nào vào hộp spam
Có vẻ một số danh sách thư được tạo bằng cách đoán địa chỉ Gmail theo kiểu FIRSTNAME.LASTNAME hoặc các tổ hợp 1–10 ký tự như tấn công từ điển
Dù vậy spam gửi tới địa chỉ domain@domain.com cũng rất ít, khoảng một thư mỗi năm
Nhìn chung lượng spam email cũng giảm mạnh, và spam hiện nay có vẻ là hỗn hợp giữa bọn lừa đảo 419 và những kẻ định lừa đảo nhưng bị lừa mua danh sách email 20 năm tuổi
Tôi không nói đó là vấn đề quyền riêng tư hay bảo mật nghiêm trọng, chỉ là vấn đề sở thích
Tên miền của tôi là một .com đã đăng ký 24 năm, và địa chỉ email được đặt nguyên văn trong thẻ H3 ngay đầu trang chủ
Spam gửi tới địa chỉ này không phải vấn đề. Tính cả thư mục rác thì khoảng 15 thư mỗi ngày, và nhờ Purelymail nên vẫn ổn
Vấn đề thật sự là email giao dịch không liên quan đến giao dịch, email quảng bá kiểu newsletter, và các mạng xã hội cứ gửi thông báo vì tôi không dùng chúng
Tôi đã không dùng tài khoản khoảng 7 năm rồi, lẽ ra giờ họ phải nhận ra rồi chứ
Có chỗ gần như không có spam, có chỗ nhận hàng chục thư mỗi ngày. SpamAssassin làm rất tốt việc bắt spam
Trái với câu “ngay cả khi khách truy cập tắt JavaScript, địa chỉ email hiển thị trên trang vẫn dùng được”, thiết lập mặc định của NoScript trên Firefox không render thẻ mà thay bằng placeholder, nên kỹ thuật này không hoạt động ở đó
https://imgur.com/2tCAgAf
Bản thân kỹ thuật này không có lý do gì phải thiếu khả năng truy cập, nhưng ví dụ trong bài thì thật sự tệ
Bài viết đặt nhãn của svg và phần tử a là “Email us!”, như vậy địa chỉ email thật bị ẩn khỏi trình đọc màn hình
Dùng aria label kiểu này là một thực hành rất tệ. Trừ khi có lý do cực kỳ đặc biệt, người dùng trình đọc màn hình cũng nên có trải nghiệm giống người khác, và nếu bạn nghĩ lý do đó đủ chính đáng thì thường là bạn có thể đang sai
Cách đúng là đưa địa chỉ email thật vào nhãn
Nếu người dùng nói “Click myemail@mydomain.tld”, trình duyệt lại expose văn bản liên kết là “Email us”, nên liên kết có thể không được kích hoạt
Tuy nhiên tôi không rõ Dragon có kích hoạt được liên kết bên trong SVG hay không
Tôi làm thế này: reanospaml@maisjsl.com
Vẫn nhận “spam”, nhưng là các đề xuất B2B khớp chính xác với chủ đề website, nên có vẻ do người thu thập thủ công
Tuy nhiên chạy trình duyệt headless để thu thập email tương đối tốn kém, nên số spam đó có thể không đến từ site
Như nhiều người đã nói, việc “bảo vệ” email không chỉ vô nghĩa mà còn thực sự có hại
Khi không có JavaScript, phần lớn nội dung vẫn đọc được, nhưng có khá nhiều site hiển thị các chuỗi như “1920x1080@60Hz” đúng nghĩa thành “[email protected]”
Tôi tự hỏi mấy thứ này có thật sự có ý nghĩa không. Là một thử nghiệm thì thú vị, nhưng nếu mục đích là tránh spammer thì hoàn toàn phí thời gian
Chẳng khác nào công khai thông tin cho toàn thế giới rồi somehow kỳ vọng chỉ “người tốt” mới truy cập được
Trừ khi bạn đổi địa chỉ email ít nhất mỗi tháng, chỉ cần ai đó chuyển thông tin liên hệ của bạn cho người khác hoặc đưa vào cơ sở dữ liệu/CRM, hoặc một dịch vụ nào đó bị xâm nhập, địa chỉ đó sẽ lọt vào danh sách và cuối cùng lan tới spammer trên toàn thế giới
Nếu bạn dùng email đó lâu dài, có thể coi xác suất chuyện này xảy ra trên thực tế gần như 100%
Nếu việc giấu email khỏi scraper thật sự hiệu quả thì spam đã không tồn tại. Tôi chưa từng công khai liên hệ cá nhân ở đâu nhưng vẫn nhận hàng chục thư spam mỗi tuần, dù tất cả đều bị lọc thành spam nên không phải chuyện lớn
Bạn tôi thật sự là cao thủ, đang dùng SVG có JavaScript để tạo thứ về cơ bản là ảnh responsive
Nó thích ứng bằng lập trình theo kích thước, khá thú vị
Bản thân việc có thể nhúng JavaScript vào SVG vừa còn ít được khai thác, vừa khiến tôi thấy hơi nguy hiểm
Tôi là kỹ sư backend nên về mặt kỹ thuật nó khá xa lĩnh vực của tôi, nhưng trông thật sự rất hay
Tôi đã bỏ các cách như vậy. Ngày nay bộ lọc spam đủ tốt, nên công khai địa chỉ email mà không làm rối cũng không có vẻ làm spam tăng lên
Các nguồn spam khác, như những công ty tệ hại có email của tôi vì lý do hợp pháp rồi bán cho bên thứ ba, là chuyện riêng
Thông thường spam lọt vào inbox của tôi dưới 1 thư mỗi ngày, mức đó chấp nhận được
Tất nhiên tùy nhà cung cấp email và bộ lọc spam nên mỗi người có thể khác, nhưng với tôi thì không phải vấn đề
Email vẫn nằm dưới dạng văn bản thuần trong tài liệu XML được tham chiếu từ mã nguồn trang
document.querySelectorAll('a')thì khác. Nhiều kỹ thuật scraping dùng cách tiếp cận như vậy, nên làm tuyến phòng thủ đầu tiên cũng ổnTuy nhiên nếu có trình duyệt headless để scraping, rồi trên trang
fetchnguyên URL hiện tại, nhận văn bản thuần và dùng regex tìm email, thì vẫn lấy được địa chỉ. Phải thừa nhận đây là cách khá kỳ quặc[0]: fetch('./').then((res) => res.text()).then((text) => console.log(text))
Nhưng trong môi trường chống spam hiện đại, tôi không rõ điều này thực sự hiệu quả đến mức nào