2 điểm bởi GN⁺ 2023-08-15 | 1 bình luận | Chia sẻ qua WhatsApp
  • Little Rat là một tiện ích Chrome nhỏ dùng để giám sát và tùy chọn chặn các lệnh gọi mạng của những tiện ích Chrome khác
  • Việc phát hiện và chặn lưu lượng của tiện ích mở rộng khác chỉ khả thi khi bật flag extensions-on-chrome-urls tại chrome://flags/#extensions-on-chrome-urls hoặc chạy Chrome với --extensions-on-chrome-urls
  • Cài đặt thủ công bằng cách tải ZIP từ GitHub, giải nén, bật Developer mode trong Chromium/Chrome Extensions, rồi dùng quy trình Load unpacked extension với thư mục little-rat-main

1 bình luận

 
GN⁺ 2023-08-15
Các ý kiến trên Hacker News
  • Mình muốn đây là tính năng mặc định của Firefox hoặc Chrome hơn là một tiện ích bên thứ ba. Như vậy tỷ lệ chấp nhận mới đủ cao để các trình duyệt khác cũng phải để ý; mình muốn có thể chỉ cho một tiện ích cụ thể được gửi yêu cầu GET tới các URL tĩnh đã định sẵn, trong khi không được phép thay đổi header
    Làm vậy vẫn cho phép cập nhật dữ liệu nhưng giảm nguy cơ rò rỉ. Một số tiện ích chỉ hoạt động bên trong trình duyệt cục bộ nên thậm chí không cần truy cập mạng. Tuy nhiên nếu tiện ích có thể sửa nguồn trang thì vẫn có thể lách việc truyền dữ liệu, nên có lẽ vì thế các trình duyệt không làm. Dù vậy, mình nghĩ thử làm vẫn tốt hơn là bỏ cuộc và phó mặc cho tiện ích Chrome

    • Chỉ quan sát thôi thì có thể làm được. Cần mở trình gỡ lỗi dành cho trình duyệt, chứ không phải trình gỡ lỗi cho trang hiện tại
      Quy trình gần giống kiểm tra UI: bật gỡ lỗi từ xa rồi chạy Browser Toolbox: https://superuser.com/questions/1608096/how-to-inspect-firef...
      Cách này cũng hữu ích để tìm xem cần gì trong file CSS user-chrome khi muốn thay đổi hiển thị tab vượt quá mức theme. Dù vậy bản thân việc dùng CSS user-chrome hơi phiền
      Để thấy được yêu cầu mạng của tiện ích, mình phải chuyển sang multi-process mode, nhìn chung đây là hành vi hợp lý
      Ví dụ uBlock lấy một danh sách chặn tùy ý mà mình bấm thử: https://i.imgur.com/wBYbBM2.png
      Firefox tự cập nhật danh sách safe-browsing trong nền: https://i.imgur.com/JYxWwjW.png
    • Ngay cả yêu cầu GET cũng có thể rò rỉ dữ liệu qua đường dẫn và tham số chuỗi truy vấn. Kể cả chặn luôn phần đó, vẫn có thể tạo kiểu liên lạc giống mã Morse ám chỉ hoạt động qua thời điểm hoặc tần suất; nếu có đủ nhiều yêu cầu thì truyền dữ liệu cỡ megabyte cũng dễ
    • Nếu một tiện ích tạo yêu cầu HTTP không chỉ là lặp lại URL vốn đã có sẵn trên trang, mình nghĩ trình duyệt nên hiển thị thông báo toast trình bày nội dung yêu cầu ở dạng dễ đọc
      Tiện ích được làm tốt sẽ chỉ thỉnh thoảng hiện thông báo, còn tiện ích cần máy chủ sẽ hiện vào thời điểm người dùng kỳ vọng nó giao tiếp với máy chủ. Tiện ích gửi phím bấm hoặc dữ liệu đáng ngờ chắc sẽ rất dễ bị phát hiện
    • Theo mình nhớ, tiện ích không thể truy cập URL không được chỉ định trong phần quyền của manifest. Mình biết Firefox hiển thị các URL đó trong hộp thoại xác nhận quyền
      Tuy nhiên có thể dùng wildcard trong URL, và hình như cũng có giá trị đặc biệt nghĩa là tất cả URL. Dù vậy không nên có nhiều tiện ích cần quyền như thế
    • Lý do các nhà làm trình duyệt không cung cấp tính năng này có lẽ là vì bất kỳ biện pháp bảo vệ nào cũng dễ bị vượt qua
      Ví dụ dù bản thân tiện ích không thể tạo yêu cầu, nếu nó có quyền sửa DOM của trang web thì có nhiều cách để lừa trang web gửi yêu cầu thay nó
  • Tiện ích này không hẳn là rất dễ cài, nên sẽ tốt hơn nếu thêm ảnh chụp màn hình hiển thị các sự kiện mạng thực sự đã bắt được. Ảnh chụp hiện tại lại che mất tính năng thú vị nhất

    • Mở Google Chrome rồi vào menu ba chấm góc trên bên phải → Extensions → Manage Extensions → bật Developer Mode ở góc trên bên phải → nút “Load Packged” ở góc trên bên trái → tải thư mục .zip đã giải nén
      Sau đó quay lại màn hình trình duyệt thông thường, bấm biểu tượng tiện ích hình mảnh ghép ở bên phải thanh địa chỉ, rồi bấm biểu tượng ghim nhỏ cạnh Little Rat; tiện ích sẽ được cài và xuất hiện trong danh sách biểu tượng tiện ích
  • Hay đấy. Thành thật mà nói, mình ngạc nhiên là chuyện này làm được
    Mình không rõ chính xác các API này cung cấp dữ liệu gì, nhưng nếu một tiện ích có thể truy cập yêu cầu của tiện ích khác thì liệu có thể phát sinh lo ngại bảo mật với tiện ích quản lý mật khẩu hoặc tiện ích dùng token xác thực không?

  • Tốt. Mấy thứ kiểu này có cảm giác nên nằm dưới dạng chrome:// URL

    • Vì tiện ích là rủi ro lớn như vậy về bảo mật và quyền riêng tư, điều đầu tiên mình nghĩ tới là tại sao đây không phải tính năng mặc định của Chromium
  • Trông ổn đấy, mình tò mò không biết có kế hoạch port sang Firefox không
    Có ai biết giải pháp thay thế nào làm việc tương tự trên Firefox không?

  • Khi lên Chrome Store thì mình sẽ dùng thử

    • Nó đang dùng declarativeNetRequest.onRuleMatchedDebug[0], mà cái này có vẻ chỉ dành cho debug, nên không rõ Chrome Web Store có cho phép không
      0: https://github.com/dnakov/little-rat/blob/f0b9b6be39af9fe7f4...
    • Vào Releases, nhấp chuột phải vào file crx để lưu, rồi vào Extensions của Chrome và kéo thả file crx đó vào là được
  • Sao lại không có trên Chrome Store?

    • Hiện đang được xét duyệt. Vì nó dùng chrome.declarativeNetRequest, đây cũng là API mà uBlock dùng
  • Gọn gàng, nhưng phần này cần xử lý cẩn thận hơn: https://github.com/dnakov/little-rat/blob/main/popup.js#L36
    Mình không muốn phải lo liệu một tiện ích khác có thể chèn XSS vào đây bằng request, ID, tên bị thao túng hay không

    • Nhận xét rất hay, nhưng chính sách bảo mật nội dung không cho phép unsafe-inlineID tiện ích do Chrome tự động tạo
  • Chỉ riêng việc không có cuộc gọi mạng không chứng minh được một tiện ích là an toàn. Nó vẫn có thể cache dữ liệu mà bạn muốn giữ riêng tư rồi gửi đi định kỳ