Danh mục OWASP: MASVS-CODE: Chất lượng mã
Tổng quan
WebView là một thành phần trình duyệt được nhúng trong các ứng dụng Android, giúp hỗ trợ hiển thị nội dung web trong ứng dụng. Thành phần này hiển thị HTML, CSS và JavaScript trong giao diện người dùng của ứng dụng.
Tập lệnh trên nhiều ứng dụng thường liên quan đến việc thực thi mã độc hại trong ngữ cảnh của ứng dụng bị hại. Trong phạm vi của tài liệu này, đối tượng sẽ bị hạn chế cụ thể việc chèn mã độc Mã JavaScript vào một WebView dễ bị tấn công.
Khi một ứng dụng chấp nhận JavaScript độc hại vào WebView mà không có đủ xác thực hoặc dọn dẹp, ứng dụng dễ bị tấn công giữa nhiều ứng dụng Đang viết tập lệnh.
Tác động
Lỗ hổng tập lệnh trên nhiều ứng dụng có thể bị khai thác khi nội dung JavaScript do kẻ tấn công kiểm soát được chuyển đến WebView của ứng dụng dễ bị tấn công mà không được xác thực hoặc dọn dẹp. Do đó, mã JavaScript được cung cấp bởi kẻ tấn công sẽ được thực thi trong ngữ cảnh WebView của ứng dụng bị hại. Chiến lược phát hành đĩa đơn mã JavaScript độc hại sau đó có thể sử dụng các quyền giống như quyền của ứng dụng của nạn nhân, vốn có thể dẫn đến việc đánh cắp dữ liệu nhạy cảm của người dùng và chiếm đoạt tài khoản.
Giải pháp giảm thiểu
Tắt JavaScript
Nếu ứng dụng của bạn không yêu cầu JavaScript, việc tắt JavaScript sẽ đảm bảo rằng JavaScript không trở thành mối đe doạ:
Kotlin
// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings
// Disable JavaScript
webSettings.javaScriptEnabled = false
Java
// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);
Nếu ứng dụng của bạn yêu cầu JavaScript, hãy đảm bảo rằng bạn sở hữu hoặc kiểm soát mọi JavaScript được truyền đến WebView. Tránh cho phép WebView thực thi tuỳ ý JavaScript, hãy xem hướng dẫn trong phần tiếp theo.
Đảm bảo chỉ tải nội dung dự kiến vào WebView
Khi sử dụng các phương thức như shouldOverrideUrlLoading()
, loadUrl()
hoặc evaluateJavascript()
,
, hãy đảm bảo rằng mọi URL được truyền đến các phương thức đó đều được kiểm tra. Như đã nêu trước đó, mọi JavaScript được truyền đến WebView chỉ được lấy từ các miền dự kiến. Vì vậy, điều quan trọng là phải xác minh nội dung đang được tải.
Hãy xem tài liệu của OWASP về việc xác thực dữ liệu đầu vào và danh sách kiểm tra bảo mật Android này cho WebView để biết các lời khuyên và ví dụ hữu ích.
Đặt chế độ cài đặt truy cập tệp an toàn cho WebView
Việc đảm bảo rằng không thể truy cập vào các tệp có thể ngăn việc thực thi JavaScript tuỳ ý trong WebView. Bạn nên cân nhắc các WebSettings
sau đây khi bảo mật quyền truy cập vào tệp:
- Vô hiệu hoá quyền truy cập vào tệp. Theo mặc định,
setAllowFileAccess
được đặt thànhTrue
trong API cấp 29 trở xuống để cho phép truy cập vào các tệp trên thiết bị. Trong API cấp 30 trở lên, giá trị mặc định làFalse
. Để đảm bảo người dùng không được phép truy cập vào tệp, đặtsetAllowFileAccess
thànhFalse
một cách rõ ràng Tắt quyền truy cập vào nội dung. Chế độ cài đặt mặc định của
setAllowContentAccess
làTrue
. Quyền truy cập vào URL nội dung cho phép WebView tải nội dung từ một nhà cung cấp nội dung được cài đặt trong hệ thống. Nếu ứng dụng của bạn không yêu cầu quyền truy cập nội dung, hãy đặtsetAllowContentAccess
thànhFalse
để ngăn chặn việc sử dụng sai có thể xảy ra trong trường hợp bị tấn công tập lệnh trên nhiều ứng dụng.kotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false
java
java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);
Bật tính năng Duyệt web an toàn
Bật tính năng Duyệt web an toàn trong AndroidManifest.xml
để quét các URL được chuyển đến WebView nhằm phát hiện các miền giả mạo hoặc độc hại.:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
Tài nguyên
- Tài liệu về tính năng Duyệt web an toàn
- Tài liệu tham khảo dành cho nhà phát triển WebView
- Thông tin tham khảo về WebSettings cho nhà phát triển WebView
- Tài liệu dành cho nhà phát triển về setAllowFileAccess
- Tài liệu tham khảo dành cho nhà phát triển setAllowContentAccess