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 hiển thị nội dung trên web trong một ứ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.
Cross-App Scripting thường liên quan đến việc thực thi mã độc trong ngữ cảnh của một ứng dụng mục tiêu. Trong phạm vi của tài liệu này, chủ đề sẽ chỉ giới hạn ở việc chèn mã JavaScript độc hại 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ó đủ quy trình xác thực hoặc dọn dẹp, ứng dụng đó sẽ dễ bị tấn công bằng Cross-app scripting.
Tác động
Lỗ hổng chèn tập lệnh vào 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 truyề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 do kẻ tấn công cung cấp sẽ được thực thi trong ngữ cảnh của WebView của ứng dụng mục tiêu. Sau đó, mã JavaScript độc hại có thể sử dụng các quyền tương tự như quyền của ứng dụng mục tiêu, điều này có thể dẫn đến hành vi đánh cắp dữ liệu người dùng nhạy cảm 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 ứng dụng 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 bắt buộc phải có 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 JavaScript tuỳ ý, 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 này đều được kiểm tra. Như đã nêu trước đó, mọi JavaScript được truyền đến WebView chỉ được đến từ các miền dự kiến, vì vậy, bạn cần xác minh nội dung đang được tải.
Hãy xem tài liệu xác thực dữ liệu đầu vào của OWASP và danh sách kiểm tra bảo mật Android này cho WebView để biết lời khuyên và ví dụ hữu ích.
Đặt chế độ cài đặt quyền truy cập an toàn vào tệp cho WebView
Đảm bảo rằng các tệp không thể truy cập có thể ngăn JavaScript tuỳ ý được thực thi trong WebView.Bạn nên cân nhắc WebSettings sau đây khi bảo mật quyền truy cập vào tệp:
- Tắt quyền truy cập vào tệp. Theo mặc định,
setAllowFileAccessđược đặt thànhTruetrong cấp độ API 29 trở xuống, cho phép truy cập vào các tệp cục bộ. Trong cấp độ API 30 trở lên, giá trị mặc định làFalse. Để đảm bảo không cho phép truy cập vào tệp, hãy đặtsetAllowFileAccessthànhFalsemột cách rõ ràng Tắt quyền truy cập nội dung. Chế độ cài đặt mặc định của
setAllowContentAccesslàTrue. Quyền truy cập vào URL nội dung cho phép WebView tải nội dung từ một trì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 đặtsetAllowContentAccessthànhFalseđể ngăn chặn hành vi sử dụng sai có thể xảy ra trong trường hợp xảy ra cuộc tấn công Cross-App Scripting.kotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = falsejava
java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);
Bật 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 truyền đến WebView nhằm phát hiện các miền lừa đả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
- Thông tin tham khảo dành cho nhà phát triển WebView
- WebSettings cho tài liệu tham khảo dành cho nhà phát triển WebView
- Tài liệu dành cho nhà phát triển setAllowFileAccess
- setAllowContentAccess developer reference