Chính sách dành cho nhà phát triển và nguyên tắc bảo mật

Simon Hangl
Simon Hangl
Demián Renzulli
Demián Renzulli

Ứng dụng web tách biệt (IWA) cung cấp một mô hình bảo mật cho phép các ứng dụng web truy cập vào các chức năng mạnh mẽ (chẳng hạn như Direct SocketsControlled Frame) thường bị hạn chế trong web "truy cập trực tiếp" tiêu chuẩn. Vì IWA hoạt động trong một môi trường có độ tin cậy cao, nên chúng phải tuân thủ các chính sách nghiêm ngặt về bảo mật và quyền riêng tư. Những nguyên tắc này được thiết kế để đảm bảo rằng khi nền tảng web có thêm nhiều quyền hạn, người dùng vẫn an toàn và tính toàn vẹn của môi trường trình duyệt vẫn được duy trì.

Mô hình tin cậy IWA

Nền tảng IWA được xây dựng dựa trên các chính sách kỹ thuật nghiêm ngặt, buộc nhà phát triển phải duy trì mức độ bảo mật cao. Trong khi các ứng dụng web tiêu chuẩn dựa vào một mô hình quyền linh hoạt, thì IWA được ký mã hoá và phân phối bằng Gói web, cho phép xác minh nguồn gốc và tính toàn vẹn của chúng.

Để đổi lấy danh tính đã xác minh này, IWA sẽ có quyền truy cập vào các API đặc quyền. Để duy trì sự tin tưởng này, nhà phát triển phải tuân thủ phương pháp ưu tiên bảo mật bằng cách tuân thủ các chính sách nghiêm ngặt hơn (bao gồm cả Chính sách bảo mật nội dung (CSP) và Các loại đáng tin cậy) để đảm bảo an toàn cho người dùng ngay cả khi sử dụng các chức năng mạnh mẽ. Điều này có nghĩa là:

  • Tính minh bạch: Người dùng không bao giờ nên ngạc nhiên về việc ứng dụng sử dụng các API đặc quyền.
  • Ít đặc quyền nhất: Ứng dụng chỉ nên yêu cầu và sử dụng những chức năng cụ thể cần thiết cho mục đích đã nêu.
  • Tính toàn vẹn tĩnh: Mọi logic có thể thực thi phải nằm trong gói ứng dụng để cho phép kiểm tra bảo mật và ngăn chặn hành vi tải ứng dụng bên ngoài mã độc.

Mặc dù IWA có các biện pháp bảo vệ mạnh mẽ được tích hợp sẵn (chẳng hạn như Chính sách bảo mật nội dung (CSP) nghiêm ngặt ngăn chặn việc thực thi các tập lệnh bên ngoài), nhưng chỉ những hạn chế về kỹ thuật không thể giảm thiểu mọi rủi ro. Ngay cả trong môi trường có độ tin cậy cao, một số mẫu triển khai hoặc lựa chọn của nhà phát triển có thể vô tình ảnh hưởng đến sự an toàn hoặc quyền riêng tư của người dùng. Hướng dẫn này trình bày những trường hợp bị hạn chế và các chính sách chi phối việc sử dụng các API đặc quyền.

Lý do các nguyên tắc này quan trọng

Việc tuân thủ các chính sách này không chỉ là tuân thủ mà còn là xây dựng một hệ sinh thái bền vững cho các ứng dụng web nâng cao. Bằng cách tuân thủ các nguyên tắc này, bạn đảm bảo rằng ứng dụng của mình:

  • Tránh các lỗi bảo mật: Ngăn chặn các lỗ hổng như Tập lệnh trên nhiều trang web (XSS) và thực thi mã từ xa bằng cách giữ cho logic độc lập.
  • Bảo vệ quyền riêng tư của người dùng: Đảm bảo rằng dữ liệu nhạy cảm và quyền truy cập vào phần cứng chỉ được xử lý khi có ý định rõ ràng của người dùng và tính minh bạch.
  • Đảm bảo nền tảng hoạt động lâu dài: Giúp duy trì các tiêu chuẩn bảo mật cao cần thiết để nền tảng IWA tiếp tục mở rộng bộ tính năng.

Nguyên tắc cốt lõi

Tính minh bạch và ý định của người dùng

Quy tắc cơ bản nhất là: đừng gây bất ngờ cho người dùng. Hành vi của ứng dụng phải phù hợp với mục đích đã nêu và kỳ vọng của người dùng.

  • Nằm trong phạm vi: Không triển khai chức năng vượt quá mục đích rõ ràng của ứng dụng.
  • Dấu vết API tối thiểu: Chỉ yêu cầu và sử dụng bộ API IWA cụ thể cần thiết để đạt được chức năng cốt lõi của ứng dụng.

Không tải mã động từ bên ngoài

Mô hình bảo mật IWA phụ thuộc vào khả năng xác minh mọi logic có thể thực thi của quản trị viên hoặc nhà cung cấp trình duyệt. Do đó, gói IWA của bạn phải độc lập. Nền tảng này thực thi chính sách này thông qua Chính sách bảo mật nội dung (CSP) nghiêm ngặt, chặn việc thực thi dựa trên chuỗi như eval()new Function():

script-src 'self' 'wasm-unsafe-eval';
require-trusted-types-for 'script';

Mặc dù CSP cho phép 'wasm-unsafe-eval' hỗ trợ WebAssembly, nhưng bạn không được bỏ qua tinh thần của ranh giới bảo mật này.

Các hành vi hoàn toàn bị cấm

  • Vận chuyển trình thông dịch cho mã từ xa: Bạn không được đưa trình thông dịch mã (ví dụ: Python hoặc Lua được biên dịch thành WASM) để tải xuống và thực thi các tập lệnh bên ngoài bằng cách sử dụng quyền truy cập mạng đặc quyền như Direct Sockets.
  • Logic được tải từ xa: Không dùng trình chạy dịch vụ để nhúng mã được tải từ xa vào nguồn gốc IWA.
  • Mã so với dữ liệu: Mặc dù được phép tải dữ liệu xuống (chẳng hạn như JSON), nhưng việc tải bất kỳ mã nào xuống nhằm mục đích diễn giải hoặc chạy đều là hành vi vi phạm trực tiếp chính sách.

Nguyên tắc về đặc quyền tối thiểu

Luôn sử dụng API có hiệu suất thấp nhất có khả năng hoàn thành một tác vụ. Bạn không bao giờ được sử dụng các API dành riêng cho IWA có đặc quyền làm lối tắt để bỏ qua các ràng buộc bảo mật hoặc lời nhắc người dùng của API Web tiêu chuẩn. Bảng sau đây trình bày các trường hợp sử dụng phổ biến để giúp bạn quyết định thời điểm sử dụng API Web truyền thống so với các chức năng dành riêng cho IWA:

Việc cần làm Sử dụng Web API tiêu chuẩn (Nên dùng) Tránh dùng API IWA có đặc quyền (Bị hạn chế)
Quyền truy cập vào ổ đĩa cứng ngoài Sử dụng API Truy cập hệ thống tệp cho hoạt động I/O tệp tiêu chuẩn. Đừng sử dụng WebUSB không hạn chế để truy cập vào bộ nhớ.
Tương tác với thẻ thông minh Sử dụng Smart Card API. Không sử dụng WebUSB không hạn chế cho thẻ thông minh.
Giao tiếp với thiết bị nối tiếp Sử dụng WebSerial API nếu API này đủ cho thiết bị của bạn. Tránh sử dụng WebUSB không hạn chế nếu WebSerial có thể thực hiện tác vụ này.
Nhúng nội dung đáng tin cậy Sử dụng <iframe> tiêu chuẩn. Đừng sử dụng <controlledframe> cho hoạt động nhúng đơn giản trừ phi bạn cần tách biệt.

Nguyên tắc dành riêng cho API

Các API IWA cung cấp những chức năng mạnh mẽ thường bị hạn chế trong trình duyệt. Hướng dẫn chung là không bao giờ sử dụng các tính năng đặc quyền này theo cách khiến người dùng ngạc nhiên hoặc làm tổn hại đến niềm tin và dữ liệu của họ.

Direct Sockets API

Direct Sockets API cấp quyền truy cập thô vào TCP và UDP, bao gồm cả quyền truy cập vào mạng cục bộ và truyền tin đa hướng.

Được phép

  • Hỗ trợ các giao thức tuỳ chỉnh: Kết nối với các máy chủ từ xa sử dụng các giao thức tuỳ chỉnh mà hiện không có Web API cấp cao hơn.
  • Duy trì các dịch vụ phụ trợ: Kết nối với một máy chủ được xác định trước và mã hoá cứng, được dùng riêng cho các dịch vụ phụ trợ của ứng dụng.
  • Khám phá phần cứng thiết yếu: Truy cập vào mạng cục bộ hoặc sử dụng truyền tin đa hướng để khám phá phần cứng cụ thể, có liên quan và thiết yếu cho chức năng của ứng dụng (ví dụ: ứng dụng chỉnh sửa video xác định vị trí bộ nhớ gắn mạng).

Không được phép

  • Gây bất ngờ cho người dùng: Triển khai quyền truy cập vào mạng mà chức năng chính của ứng dụng không biện minh rõ ràng, chẳng hạn như một trình chỉnh sửa văn bản giao tiếp với các thiết bị mạng cục bộ.
  • Quét mạng tuỳ ý: Thực hiện quét diện rộng mạng cục bộ của người dùng (ví dụ: quét cổng 192.168.1.0/24) để lập hồ sơ người dùng hoặc khám phá các thiết bị không liên quan.
  • Nhắm đến các thiết bị cục bộ: Nghiêm cấm mọi hành vi cố gắng thăm dò, định cấu hình lại hoặc tấn công các thiết bị khác trên mạng cục bộ.

Controlled Frame API

Phần tử <controlledframe> cho phép nhúng và sửa đổi nội dung trên nhiều nguồn, bao gồm cả việc chèn tập lệnh và thay đổi tiêu đề.

Được phép

  • Đơn giản hoá giao diện người dùng: Nhúng dịch vụ của bên thứ ba và chèn CSS để ẩn các phần tử giao diện người dùng không liên quan hoặc mang lại trải nghiệm nhất quán hơn.
  • Điều phối hoạt động giao tiếp an toàn: Đóng vai trò là người kiểm soát bằng cách nhận các yêu cầu từ trang được nhúng bằng postMessage và chỉ trả về dữ liệu cần thiết đã được dọn dẹp, được tìm nạp thông qua các API đặc quyền.

Không được phép

  • Đánh cắp thông tin đăng nhập của người dùng: Chèn tập lệnh để thu thập mật khẩu, cookie phiên hoặc dữ liệu nhạy cảm khác của người dùng từ nội dung được nhúng.
  • Vi phạm điều khoản dịch vụ: Sửa đổi các nền tảng được nhúng theo cách vi phạm Điều khoản dịch vụ của các nền tảng đó, chẳng hạn như nhấp vào quảng cáo theo chương trình hoặc trích xuất dữ liệu trái phép.
  • Uỷ quyền truy cập đặc quyền: Tạo một truy cập trực tiếp cho phép nội dung được nhúng không đáng tin cậy truy cập trực tiếp hoặc không kiểm soát vào một API IWA có đặc quyền.
  • Triển khai AI không được kiểm soát: Thực hiện hành động thay cho người dùng đã đăng nhập thông qua AI mà không có các ràng buộc cụ thể và minh bạch về trường hợp sử dụng.

Ghi màn hình không giới hạn

Cho phép chụp ảnh màn hình mà không cần người dùng liên tục được nhắc cấp quyền như trên web tiêu chuẩn.

Được phép

  • Cung cấp chức năng cốt lõi: Sử dụng tính năng chụp màn hình như một phần rõ ràng trong dịch vụ của ứng dụng, chẳng hạn như trong các tính năng ghi lại cuộc họp ảo hoặc hướng dẫn.
  • Đảm bảo người dùng biết: Thông báo rõ ràng cho người dùng rằng hoạt động ghi hình có thể diễn ra trước khi họ tương tác với ứng dụng.

Không được phép

  • Ghi âm/ghi hình lén lút: Ghi lại màn hình của người dùng mà không có sự đồng ý và kiến thức rõ ràng từ trước của họ.
  • Vi phạm các quy định về quyền riêng tư: Thực hiện bất kỳ hoạt động ghi hình nào vi phạm luật về quyền riêng tư của địa phương hoặc quốc tế.

WebUSB không bị hạn chế

WebUSB không hạn chế bỏ qua danh sách chặn WebUSB tiêu chuẩn để cho phép tương tác ở cấp thấp với các thiết bị.

Được phép

  • Hỗ trợ phần cứng độc quyền: Tương tác với phần cứng chuyên dụng hoặc phần cứng cũ mà không có API web cấp cao, chẳng hạn như bộ điều khiển công nghiệp.

Hiện đã được phép

  • Bỏ qua các API chuyên dụng: Sử dụng WebUSB cho những thiết bị có API cụ thể và bị hạn chế hơn, chẳng hạn như thẻ thông minh (sử dụng Smart Card API) hoặc bộ nhớ ngoài (sử dụng File System Access API).

Quản lý cửa sổ (window.openwindow.focus)

IWA có thể tạo cửa sổ bật lên và cửa sổ tiêu điểm mà không cần cử chỉ của người dùng theo yêu cầu của web tiêu chuẩn.

Được phép

  • Thông báo hoàn tất tác vụ: Tập trung vào cửa sổ ứng dụng khi một tác vụ quan trọng ở chế độ nền do người dùng bắt đầu (chẳng hạn như kết xuất video) hoàn tất.

Không được phép

  • Gửi nội dung rác: Gửi cho người dùng nhiều cửa sổ không mong muốn.
  • Lừa đảo: Mở các cửa sổ được thiết kế để mô phỏng hộp thoại hệ thống hoặc đánh lừa người dùng.
  • Cướp tiêu điểm: Làm gián đoạn người dùng bằng cách cướp tiêu điểm từ các ứng dụng khác cho những sự kiện không quan trọng.

Kết luận

Cấu trúc bảo mật của Ứng dụng web tách biệt được thiết kế để hỗ trợ nhà phát triển trong khi vẫn duy trì một môi trường có độ tin cậy cao cho người dùng. Bằng cách tuân thủ các nguyên tắc này, bạn đảm bảo ứng dụng của mình vẫn là một thành phần có trách nhiệm trong hệ sinh thái IWA. Những điểm quan trọng nhất mà bạn cần nắm được trong hướng dẫn này là:

  • Ưu tiên tính minh bạch: Hành vi của ứng dụng phải luôn phù hợp với mục đích đã nêu; không bao giờ triển khai chức năng khiến người dùng bất ngờ hoặc phản bội người dùng.
  • Thực thi tính toàn vẹn của gói: Mọi logic có thể thực thi đều phải nằm trong gói IWA để cho phép xác minh tĩnh. Chúng tôi nghiêm cấm việc bỏ qua mô hình bảo mật thông qua việc tải mã động từ bên ngoài hoặc trình thông dịch từ xa.
  • Tuân thủ nguyên tắc Đặc quyền tối thiểu: Luôn chọn API bị hạn chế nhất có sẵn cho một tác vụ nhất định. Bạn chỉ nên sử dụng các API IWA đặc quyền khi API Web tiêu chuẩn không đủ cho chức năng cốt lõi của ứng dụng.
  • Đóng vai trò là người kiểm soát: Khi sử dụng các công cụ mạnh mẽ như <controlledframe>, IWA của bạn phải đóng vai trò là một trung gian bảo mật thay vì một proxy minh bạch cho nội dung không đáng tin cậy.

Trước khi xuất bản IWA, hãy thực hiện quy trình kiểm tra cuối cùng đối với việc triển khai bằng cách tự hỏi:

  1. Tôi có đang sử dụng API đơn giản nhất và bị hạn chế nhất có thể cho tác vụ này không?
  2. Người dùng có cảm thấy bất ngờ hoặc bị phản bội bởi những gì ứng dụng của tôi đang làm không?

Nếu câu trả lời cho câu hỏi đầu tiên là "Không" hoặc câu hỏi thứ hai là "Có", thì có thể ứng dụng của bạn đang vi phạm chính sách bảo mật của IWA và có thể bị xoá.