ArkWeb高階安全模式 - 提升應用安全性

SameX發表於2024-10-18

本文旨在深入探討華為鴻蒙HarmonyOS Next系統(截止目前API12)的技術細節,基於實際開發實踐進行總結。
主要作為技術分享與交流載體,難免錯漏,歡迎各位同仁提出寶貴意見和問題,以便共同進步。
本文為原創內容,任何形式的轉載必須註明出處及原作者。

簡介

ArkWeb框架的高階安全模式為開發者提供了更強大的安全控制能力,可以幫助開發者提升應用的安全性,防止針對Web應用的攻擊。本文將介紹ArkWeb高階安全模式的各項特性,以及如何開啟和使用這些特性,並探討其他安全措施,例如CSP策略、X-Frame-Options頭和X-Content-Type-Options頭。

高階安全模式特性

ArkWeb高階安全模式提供了以下安全特性:

  • 禁用WebAssembly: WebAssembly是一種新的Web標準,它允許開發者使用多種程式語言(例如C/C++、Rust等)編寫程式碼,並將其編譯為可以在瀏覽器中執行的程式碼。WebAssembly具有高效能和低開銷的特點,但也存在安全風險,例如程式碼注入攻擊。
  • 禁用WebGL/WebGL2: WebGL是Web標準,它允許開發者使用HTML5 canvas元素建立2D和3D圖形。WebGL/WebGL2具有強大的圖形渲染能力,但也存在安全風險,例如記憶體洩露攻擊和緩衝區溢位攻擊。
  • 禁用PDF viewer預覽功能: PDF viewer預覽功能允許使用者在瀏覽器中預覽PDF檔案。PDF檔案可能包含惡意程式碼,例如惡意指令碼或惡意外掛,因此禁用PDF viewer預覽功能可以減少安全風險。
  • 禁用MathML: MathML是Web標準,它允許開發者使用XML語法表示數學公式。MathML可能包含惡意程式碼,例如惡意指令碼或惡意外掛,因此禁用MathML可以減少安全風險。
  • 禁用Web speech api: Web speech api允許開發者使用語音識別和語音合成功能。Web speech api可能被惡意開發者濫用,例如竊取使用者的語音資訊或控制使用者的裝置,因此禁用Web speech api可以減少安全風險。
  • 禁用RTCDataChannel: RTCDataChannel是WebRTC協議的一部分,它允許Web應用進行點對點資料傳輸。RTCDataChannel可能被惡意開發者濫用,例如竊取使用者的通訊資料或控制使用者的裝置,因此禁用RTCDataChannel可以減少安全風險。
  • 禁用MediaDevices.getUserMedia: MediaDevices.getUserMedia允許開發者獲取使用者的攝像頭和麥克風許可權。MediaDevices.getUserMedia可能被惡意開發者濫用,例如竊取使用者的影片或音訊資訊,因此禁用MediaDevices.getUserMedia可以減少安全風險。
  • 禁用service worker: service worker允許開發者建立可以在後臺執行的服務,例如快取資源、推送通知等。service worker可能被惡意開發者濫用,例如竊取使用者的快取資料或控制使用者的裝置,因此禁用service worker可以減少安全風險。
  • 禁用非代理udp流量: 非代理udp流量可能被惡意開發者濫用,例如進行DDoS攻擊或竊取使用者的網路資料,因此禁用非代理udp流量可以減少安全風險。
  • 禁用即時編譯(JIT)能力: 即時編譯(JIT)能力允許瀏覽器將JavaScript程式碼編譯為機器碼,以提高程式碼執行效率。即時編譯(JIT)能力可能被惡意開發者濫用,例如注入惡意程式碼或竊取使用者的計算資源,因此禁用即時編譯(JIT)能力可以減少安全風險。

如何開啟高階安全模式

您可以透過以下步驟開啟ArkWeb的高階安全模式:

  1. 在應用的module.json5檔案中新增以下許可權:
"requestPermissions": [
    {
        "name": "ohos.permission.SECURITY_SERVICE"
    }
]
  1. 在應用的入口檔案(例如EntryAbility.ets)中呼叫以下API開啟高階安全模式:
import { webview } from '@ohos.web.webview';
// ...
webview.WebviewController.enableAdvancedSecurityMode({
    enable: true, // 開啟高階安全模式
    disableWebAssembly: true, // 禁用WebAssembly
    disableWebGL: true, // 禁用WebGL
    disablePDFViewer: true, // 禁用PDF viewer
    disableMathML: true, // 禁用MathML
    disableWebSpeechAPI: true, // 禁用Web speech api
    disableRTCDataChannel: true, // 禁用RTCDataChannel
    disableMediaDevicesGetUserMedia: true, // 禁用MediaDevices.getUserMedia
    disableServiceWorker: true, // 禁用service worker
    disableNonProxyUDP: true, // 禁用非代理udp流量
    disableJITCompilation: true // 禁用即時編譯(JIT)能力
});

其他安全措施

除了高階安全模式之外,您還可以採取以下措施提升應用的安全性:

  • 內容安全策略(CSP): CSP是一種安全機制,它允許開發者指定哪些資源可以被Web應用載入,以及哪些資源不可以被載入。CSP可以有效地防止跨站指令碼攻擊(XSS)等安全漏洞。
  • X-Frame-Options頭: X-Frame-Options頭可以防止點選劫持攻擊。該頭可以指定哪些frame可以顯示Web應用的內容,以及哪些frame不可以顯示。
  • X-Content-Type-Options頭: X-Content-Type-Options頭可以防止MIME型別混淆攻擊。該頭可以指定Web應用的內容型別,以及瀏覽器如何解釋內容型別。

示例程式碼

以下示例程式碼展示瞭如何使用ArkWeb API開啟高階安全模式,並禁用特定高風險特性。同時,展示瞭如何配置CSP策略,以及如何設定X-Frame-Options和X-Content-Type-Options頭:

import { webview } from '@ohos.web.webview';
import { abilityAccessCtrl } from '@ohos.ability';
// ...
// 開啟高階安全模式,並禁用特定高風險特性
webview.WebviewController.enableAdvancedSecurityMode({
    enable: true, // 開啟高階安全模式
    disableWebAssembly: true, // 禁用WebAssembly
    disableWebGL: true, // 禁用WebGL
    // ... 其他高風險特性的禁用
});
// 配置CSP策略
webview.WebviewController.setCSP({
    "default-src": "'self'", // 允許載入同源資源
    "script-src": "'self' https://trusteddomain.com", // 允許載入同源資源和來自特定域的指令碼
    "style-src": "'self' https://trusteddomain.com", // 允許載入同源資源和來自特定域的樣式
    // ... 其他CSP規則的配置
});
// 設定X-Frame-Options頭
webview.WebviewController.setHttpHeader({
    "key": "X-Frame-Options",
    "value": "DENY" // 禁止在frame中顯示
});
// 設定X-Content-Type-Options頭
webview.WebviewController.setHttpHeader({
    "key": "X-Content-Type-Options",
    "value": "nosniff" // 禁止瀏覽器嘗試猜測內容型別
});

總結

ArkWeb框架的高階安全模式為開發者提供了強大的安全控制能力,可以幫助開發者提升應用的安全性,防止針對Web應用的攻擊。透過了解高階安全模式的各項特性,並採取其他安全措施,例如CSP策略、X-Frame-Options頭和X-Content-Type-Options頭,您可以開發出更加安全可靠的Web應用,保護使用者的隱私和資料安全。

相關文章