2009-08-02 18 views
6

Tôi hiện đang làm việc trên một trang web trò chuyện/diễn đàn nhỏ mà tôi đã tạo ra vào cuối tuần và có các mục ẩn danh (ví dụ: không có tên người dùng hoặc mật khẩu). Điều này có vẻ như nó có thể được dễ dàng-bánh cho một spammer để hủy hoại, nhưng tôi không muốn làm phiền người dùng với captchas hoặc đầu vào chống thư rác tương tự.Chặn spam trong một trang PHP mà không làm phiền người dùng

Có bất kỳ lựa chọn thay thế vô hình nào cho người dùng này không? Cảm ơn bạn đã giúp đỡ.

Trả lời

6

Không phải là giải pháp chống bom, nhưng bạn có thể có một số trường nhập ẩn. Nếu những thứ đó không được để trống, bạn sẽ bắt được một bot. Bots có xu hướng điền vào tất cả các lĩnh vực đầu vào, trong khi người dùng chắc chắn sẽ rời khỏi trường họ không thấy trống.

+1

Để làm rõ, các trường nhập "ẩn" phải được ẩn bởi CSS (biểu định kiểu, không phải kiểu nội tuyến) hoặc, tốt hơn, javascript (mặc dù chỉ khi javascript đã là một phần cần thiết của trang web của bạn). Làm 'kiểu đầu vào = ẩn' sẽ không đi theo bất kỳ bot nào. – ChssPly76

+1

Chỉ để tham khảo, kỹ thuật này được gọi là honeypot. – cletus

+0

Tôi cũng không đánh lừa bot. Bạn có thể dễ dàng sử dụng JS để kiểm tra xem một trường có bị ẩn hay không (ngay cả khi nó bị ẩn bởi CSS). Bên cạnh đó bạn giả định rằng tất cả các trường sẽ được điền bởi các bot, do đó, điều này không bảo vệ bạn khỏi các bot chỉ lấp đầy một số trường. – RaYell

0

Ý tưởng về capchas là chúng rất dễ để con người vượt qua nhưng rất diffucult cho các bot, v.v. để tránh. Nếu bạn không muốn loại giải pháp này, điều gì sẽ ngăn những chương trình thư rác đó đăng tải lên trang web của bạn?

Giống như bạn muốn máy tính của mình được an toàn nhưng bạn không muốn sử dụng tường lửa và chống vi-rút.

Tôi nghĩ bạn có thể tạo phiên cho mỗi người dùng truy cập trang web của bạn và lần đầu tiên họ muốn đăng nội dung nào đó hiển thị cho họ hình ảnh xác thực (không yêu cầu đăng nhập, chỉ cần vượt qua giới hạn). Nếu họ vượt qua nó chỉ cần lưu trữ một lá cờ trong phiên mà họ là con người. Miễn là họ đã mở trình duyệt của họ, họ có thể đăng và trả lời trên trang web của bạn những gì họ muốn. Bots sẽ không vượt qua bài kiểm tra đầu tiên này.

0

Có hai lớp bảo vệ chống spam.

Cách thứ nhất là làm cho chương trình tự động gặp khó khăn trong việc vấp ngã dữ liệu vào trang web của bạn. Phương thức trường biểu mẫu ẩn thường được đề cập cho điều này và phù hợp với các trang web có lưu lượng truy cập thấp. Các biện pháp bảo vệ này có thể bị đánh bại bởi bot spam được viết cho trang web của bạn. Tuy nhiên nếu bạn quá nhỏ mục tiêu, điều này sẽ không xảy ra.

Loại thứ hai là loại "khó chịu". Điều này thường liên quan đến xác thực, đăng ký hoặc xác nhận email của bài đăng. Bạn có thể sử dụng một vài cách tiếp cận để làm cho điều này ít phiền toái hơn, nhưng đòi hỏi nhiều nỗ lực hơn về phía bot để đăng spam.

Lưu ý rằng cả hai phương pháp này thường có thể cản trở người dùng bị vô hiệu hóa và người dùng thiết bị di động.

2

này đã làm việc 100% thời gian cho tôi:

<input type="text" style="display:none" name="email" value="do not fill this in it is for spam catching" /> 

Sau đó phía máy chủ (PHP):

if($_POST['email'] != 'do not fill this in it is for spam catching') { 
    // spam 
} 

Như đã đề cập trước đó, hầu hết các chương trình điền vào tất cả mọi thứ trong, đặc biệt là nguyên liệu đầu vào có tên là " e-mail".

+0

Chúng có thể đủ thông minh để không điền vào các đầu vào được điền sẵn. Tốt hơn là để trống nó theo ý kiến ​​của tôi. – MitMaro

+0

Điểm rất tốt. Nó hoạt động hoàn hảo cho thời điểm trên trang web của tôi. Nếu (khi nào) ngày đến, các chương trình vượt qua phương pháp này, tôi sẽ đi cho một cái gì đó khác, tất nhiên. Tôi để nó ở đó để tiếp cận. –

8

Một điều bạn nên biết về những kẻ gửi thư rác là họ luôn luôn đi cho trái cây treo thấp. Cùng với tin tặc. Bằng cách này, tôi có nghĩa là họ sẽ chọn dễ dàng nhất để đạt được mục tiêu ảnh hưởng đến hầu hết người dùng. Đây là lý do tại sao lỗ hổng PHP và Windows thường bị khai thác: chúng ảnh hưởng đến rất nhiều người dùng nếu bạn thấy điểm yếu/khai thác "thị trường" mục tiêu của bạn là rất lớn.

Nó cũng là một phần lớn lý do tại sao Linux và Mac OS vẫn tương đối không bị ảnh hưởng bởi vi rút ví dụ: thị trường mục tiêu là nhiều hơn nhỏ hơn Windows. Bây giờ tôi không cân bằng tính bảo mật và mạnh mẽ của Windows với Mac/Linux nhưng mặc dù mô hình bảo mật của hai cái sau tốt hơn nhiều so với số lượng các cuộc tấn công trước đây vẫn không cân xứng với những thiếu sót mà nó có.

Tôi nói điều này vì một trong những cách tốt nhất để tránh những loại vấn đề này là không sử dụng softare phổ biến. Ví dụ, phpBB đã có rất nhiều cuộc tấn công chống lại nó chỉ vì nó rất phổ biến.

Vì vậy, bằng cách thực hiện hệ thống trò chuyện/diễn đàn của riêng bạn, bạn sẽ gặp phải bất lợi vì bạn có một hệ thống không có thử nghiệm thực địa phổ biến nhưng bạn cũng có lợi thế thời gian của người gửi spam để khai thác nó. Vì vậy, những gì bạn cần xem ra là những gì hệ thống tự động có thể làm chống lại bạn. Biểu mẫu liên hệ trên trang web có xu hướng có các điểm đánh dấu dễ nhận biết (như tên, email và các trường nhận xét).

Vì vậy, tôi sẽ tư vấn cho:

  • Bỏ qua câu trả lời mà đi trong vòng 5-10 giây nói gửi dưới hình thức cho người sử dụng;
  • Sử dụng honeypot (các trường ẩn CSS/JS như được mô tả ở nơi khác);
  • Sử dụng Javascript khi áp dụng để hiển thị, sắp xếp lại hoặc hiển thị biểu mẫu;
  • Sử dụng tên trường biểu mẫu không thể dự đoán được; và
  • Phản hồi xấu của bướm ga bằng IP.
+1

Tôi nghĩ rằng một sự kết hợp của các bảo vệ honeypot và hẹn giờ sẽ là một khởi đầu tốt. Làm thế nào tôi sẽ thực hiện một bộ đếm thời gian? – SpleenTea

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