Làm thế nào phát hiện người dùng đang sử dụng VPN bằng JavaScript

 

Làm thế nào phát hiện người dùng đang sử dụng VPN bằng JavaScript


Trong thời đại công nghệ hiện nay, các công cụ bảo mật trực tuyến như VPN (Mạng Riêng Ảo) đã trở nên phổ biến như cơm bữa. Nếu bạn đang xây dựng ứng dụng web, đặc biệt là những ứng dụng liên quan đến bảo mật, phòng chống gian lận, hoặc nội dung bị giới hạn theo khu vực, chắc hẳn bạn đã từng tự hỏi...

"Liệu tôi có thể phát hiện người dùng đang sử dụng VPN không?"

Mặc dù việc phát hiện VPN chỉ bằng JavaScript thuần túy hơi "khó nhằn", nhưng có một phương pháp đơn giản là sử dụng dịch vụ thông tin IP như ipinfo.io. Trong bài viết này, mình sẽ chỉ cho các bạn cách phát hiện người dùng VPN hoặc proxy chỉ với vài dòng JavaScript "thần thánh".

Ý tưởng cơ bản

Các trình duyệt không trực tiếp cung cấp thông tin mạng như địa chỉ IP vì lý do bảo mật (khôn thế chứ đâu có khờ!). Vì vậy, để tìm IP của người dùng (và xem liệu nó có liên quan đến VPN hoặc proxy không), chúng ta có thể gọi API bên ngoài như ipinfo.io, đây là dịch vụ cung cấp dữ liệu IP chi tiết, bao gồm cả thông tin về quyền riêng tư.

Code mẫu nè

Đây là một hàm đơn giản để kiểm tra xem người dùng có khả năng đang sử dụng VPN hoặc proxy không:

async function checkVpnUsage() {
  const res = await fetch('https://ipinfo.io/json?token=YOUR_TOKEN');
  const data = await res.json();

  console.log('Thông tin IP:', data);

  // Một số dịch vụ cung cấp trường `privacy` hoặc `proxy`
  if (data.privacy && (data.privacy.vpn || data.privacy.proxy)) {
    console.log('Người dùng có khả năng đang sử dụng VPN hoặc proxy.');
  } else {
    console.log('Không phát hiện VPN/proxy nào cả.');
  }
}

checkVpnUsage();

Cách hoạt động

  • Lấy dữ liệu IP: Chúng ta sử dụng fetch() để lấy dữ liệu JSON từ API của ipinfo.
  • Kiểm tra trường Privacy: Nếu phản hồi chứa đối tượng privacy, và trường vpn hoặc proxytrue, chúng ta giả định người dùng đang sử dụng VPN hoặc máy chủ proxy.
  • Ghi lại kết quả: Chúng ta chỉ in kết quả ra console (đơn giản vậy thôi, không cần phức tạp hóa vấn đề).

Ví dụ về phản hồi API

Khi bạn gọi https://ipinfo.io/json, bạn sẽ nhận được phản hồi kiểu này:

{
  "ip": "8.8.8.8",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
  "org": "Google LLC",
  "privacy": {
    "vpn": true,
    "proxy": false,
    "relay": false,
    "hosting": true,
    "service": "Google Cloud"
  }
}

Để ý đối tượng privacy nhé - nó cho bạn biết liệu IP có liên quan đến VPN, proxy, hoặc dịch vụ hosting hay không.

Những điều cần lưu ý

  • Bạn cần Token API: Đăng ký tại ipinfo.io để lấy token miễn phí. Gói miễn phí thường cho phép khoảng 1.000 lần gọi API mỗi tháng (đủ xài cho dân nghiệp dư như chúng ta).
  • Việc phát hiện không hoàn hảo 100%: Một số VPN hiện đại sử dụng địa chỉ IP nhà dân (residential IP), khiến chúng khó bị phát hiện hơn (lươn lẹo quá trời).
  • Nên xem xét xác thực phía máy chủ: An toàn hơn khi thực hiện kiểm tra này ở phía server, để tránh người dùng can thiệp vào JavaScript phía frontend.
  • Tôn trọng quyền riêng tư: Hãy thông báo rõ ràng cho người dùng nếu bạn thu thập hoặc sử dụng địa chỉ IP hoặc vị trí của họ (đừng làm "ninja" nha).

Ví dụ thực tế

if (data.privacy && (data.privacy.vpn || data.privacy.proxy)) {
  alert('Chúng tôi phát hiện bạn đang dùng VPN hoặc proxy. Để có trải nghiệm tốt hơn, vui lòng tắt nó đi!');
}

 


Vậy là xong rồi đó! Hy vọng bài viết ngắn gọn này đã giúp bạn hiểu thêm một chút về cách phát hiện VPN bằng JavaScript 😁 Nếu thấy hay thì cho mình xin một like nhé! 👍

Nhận xét

Bài đăng phổ biến