2010-09-05 38 views
8

Tôi khá chắc chắn rằng nhiều người đã nghĩ về điều này, nhưng đối với một số lý do tôi không thể tìm thấy nó bằng cách sử dụng Google và tìm kiếm StackOverflow.Tạo liên kết hoàn toàn vô hình?

Tôi muốn tạo liên kết vô hình (danh sách đen bởi robots.txt) thành trang CGI hoặc PHP sẽ "bẫy" chương trình độc hại và trình thu thập thông tin. Cho đến nay, tôi đã cố gắng:

  1. liên kết rỗng trong cơ thể:

    <a href='/trap'><!-- nothing --></a> 
    

    này hoạt động khá độc đáo hầu hết thời gian, với hai vấn đề nhỏ:

    Vấn đề: Liên kết là một phần của phần thân của tài liệu. Mặc dù nó không thể nhấp được bằng chuột, nhưng một số khách truy cập vẫn vô tình nhấn chuột khi bàn phím điều hướng trang web bằng TabNhập. Ngoài ra, nếu họ sao chép-dán trang vào một trình xử lý văn bản hoặc phần mềm e-mail, ví dụ, liên kết bẫy được sao chép cùng và đôi khi thậm chí có thể nhấp (một số phần mềm không thích các thẻ rỗng <a> và sao chép href như nội dung của tag).

  2. khối vô hình trong cơ thể:

    <div style="display:none"><a href='/trap'><!-- nothing --></a></div> 
    

    này sửa chữa các vấn đề với bàn phím điều hướng, ít nhất là trong các trình duyệt tôi thử nghiệm. Liên kết có hiệu quả không thể truy cập được từ màn hình hiển thị bình thường của trang, trong khi vẫn hiển thị hoàn toàn với hầu hết các bot của nhện với mức độ thông minh hiện tại của chúng.

    Sự cố: Liên kết vẫn là một phần của DOM. Nếu người dùng sao chép-dán nội dung của trang, nó sẽ xuất hiện trở lại.

  3. Bên trong khối bình luận:

    <!-- <a href='/trap'>trap</a> --> 
    

    này có hiệu quả loại bỏ các liên kết từ DOM của trang. Về mặt kỹ thuật, nhận xét vẫn là một phần của DOM, nhưng nó đạt được hiệu quả mong muốn mà các tác nhân người dùng tuân thủ sẽ không tạo ra phần tử A, vì vậy nó không phải là một liên kết thực sự.

    Sự cố: Hầu hết các chương trình nhện hiện nay đủ thông minh để phân tích cú pháp (X) HTML và bỏ qua nhận xét. Cá nhân tôi đã thấy các bot sử dụng các đối tượng COM/ActiveX của Internet Explorer để phân tích cú pháp (X) HTML và trích xuất tất cả các liên kết thông qua XPath hoặc Javascript. Các loại bot này không bị lừa theo siêu liên kết bẫy.

Tôi đã sử dụng phương pháp # 3 cho đến đêm qua, khi tôi bị trúng một bầy bot dường như thực sự có chọn lọc trên các liên kết mà họ theo dõi. Bây giờ tôi trở lại phương pháp số 2, nhưng tôi vẫn đang tìm kiếm một cách hiệu quả hơn.

Bất kỳ đề xuất nào hoặc giải pháp khác mà tôi đã bỏ lỡ?

Trả lời

12

Thêm nó như bạn nói:

<a id="trap" href='/trap'><!-- nothing --></a> 

Và sau đó loại bỏ nó với javascript/jQuery:

$('#trap').remove(); 

chương trình thư rác sẽ không được thực thi javascript và thấy nguyên tố này, hầu hết các trình duyệt sẽ xóa yếu tố làm cho nó không thể đánh bằng tabbing đến nó

Chỉnh sửa: Cách đơn giản nhất không phải jQuery là:

<div id="trapParent"><a id="trap" href='/trap'><!-- nothing --></a></div> 

Và sau đó loại bỏ nó với javascript:

var parent = document.getElementById('trapParent'); 
var child = document.getElementById('trap'); 
parent.removeChild(child); 
+0

Điều gì sẽ xảy ra nếu một số khách hàng không bật JavaScript? –

+1

Sau đó, họ không nhìn thấy liên kết, nhưng có những bất lợi của việc có thể tab để liên kết. Nó không phải là một sửa chữa 100%, nhưng tôi không nghĩ rằng có rất nhiều khách hàng sẽ tab đến liên kết không nhìn thấy có javascript bị vô hiệu hóa. –

+0

Điều này có vẻ là một giải pháp tuyệt vời! Tôi không thực sự lo lắng về sự phụ thuộc JavaScript, vì nó chỉ ảnh hưởng đến giao điểm của hai dân tộc thiểu số (những người khám phá các liên kết bằng cách sao chép hoặc dán tab và những người đã tắt tập lệnh). Bạn có thể mở rộng câu trả lời của bạn để bao gồm một giải pháp mà không phụ thuộc vào jQuery? Tôi nghĩ rằng nó nên liên quan đến document.GetElementById() và node.parentNode.removeChild(), nhưng kinh nghiệm của tôi với Javascript là khá hạn chế. – Juliano

2

giải pháp này dường như làm việc tốt cho tôi, may mắn là tôi đã đánh dấu nó. Tôi hy vọng nó sẽ giúp bạn là tốt.

bạn có thể tạo liên kết ẩn như thế này và đặt nó ở phía trên cùng bên trái của trang và để ngăn người dùng thường xuyên truy cập nó quá dễ dàng, bạn có thể sử dụng css để đặt hình ảnh logo lên hình ảnh này.

<a href="/bottrap.php"><img src="images/pixel.gif" border="0" alt=" " width="1" height="1"></a> 

nếu bạn quan tâm đến việc thiết lập cách danh sách đen các bot tham khảo liên kết này để giải thích chi tiết về cách.

http://www.webmasterworld.com/apache/3202976.htm

+0

Đúng nếu tôi sai, nhưng cuộc thảo luận đó có chứa câu trả lời cho cách thêm liên kết vào bẫy không? Nếu vậy, hãy đề cập đến nó trong câu trả lời của bạn để khám phá dễ dàng hơn (và để lại liên kết cho những người muốn biết chi tiết cụ thể) –

+0

Bản thân bẫy không phải là vấn đề. Tôi sử dụng một daemon nhận tin nhắn từ các kịch bản bẫy và thêm địa chỉ IP vào một quy tắc phù hợp "gần đây" iptables cấm IP trong 1 giờ. Vấn đề là thêm liên kết đến các trang một cách rõ ràng. Giải pháp của bạn không tốt hơn các phương pháp tôi đang sử dụng, vì không chỉ liên kết có thể truy cập (và có thể nhấp), nếu người dùng sao chép-dán văn bản, nó sao chép liên kết _and_ hình ảnh. Đôi khi hình ảnh được nhúng, đôi khi nó bị hỏng và đôi khi ứng dụng thêm cơ sở liên kết vào liên kết ban đầu. – Juliano

Các vấn đề liên quan