DEV Community

SameX
SameX

Posted on

ArkWeb高级安全模式 - 提升应用安全性

本文旨在深入探讨华为鸿蒙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的高级安全模式:
  • 在应用的module.json5文件中添加以下权限:
"requestPermissions": [
    {
        "name": "ohos.permission.SECURITY_SERVICE"
    }
]
Enter fullscreen mode Exit fullscreen mode
  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)能力
});
Enter fullscreen mode Exit fullscreen mode

其他安全措施

除了高级安全模式之外,您还可以采取以下措施提升应用的安全性:

  • 内容安全策略(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" // 禁止浏览器尝试猜测内容类型
});
Enter fullscreen mode Exit fullscreen mode

总结

ArkWeb框架的高级安全模式为开发者提供了强大的安全控制能力,可以帮助开发者提升应用的安全性,防止针对Web应用的攻击。通过了解高级安全模式的各项特性,并采取其他安全措施,例如CSP策略、X-Frame-Options头和X-Content-Type-Options头,您可以开发出更加安全可靠的Web应用,保护用户的隐私和数据安全。

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

Top comments (0)

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay