
回复
兄弟们,Web应用的安全就像家里的防盗门,普通锁只能防小毛贼,高级安全模式才是防专业客的防弹衣。ArkWeb的高级安全模式能把Web应用的安全等级拉满,今天咱就聊聊怎么给咱的应用穿上这件防弹衣。
ArkWeb高级安全模式能禁用11项高风险功能,每项都是黑常用的突破口:
禁用功能 | 为啥危险? | 黑咋利用? |
---|---|---|
WebAssembly | 高性能代码执行,可能注入恶意原生代码 | 用C代码写漏攻 |
WebGL | 图形渲染接口,可能内存溢出 | 利用显卡驱动漏执行恶代 |
PDF预览 | PDF可能藏恶意脚本或漏 | 打开恶意PDF就中招 |
MathML | 数学公式渲染可能被注入恶意标记 | 用特殊符号触发XSS攻 |
语音API | 偷录用户语音信息 | 后台偷偷录音发出去 |
RTCDataChannel | 点对点通信可能被劫持 | 监听用户实时通信数据 |
摄像头麦克风 | 偷拍偷录 | 静默开启摄像头录制用户画面 |
Service Worker | 后台服务可能篡改缓存 | 替换合法资源为恶意内容 |
非代理UDP | 绕过代理的网络通信可能被利用 | 用于DDoS攻或数据窃取 |
JIT即时编译 | 动态编译代码可能被注入恶意指令 | 修改JIT编译过程执行恶代 |
import { webview } from '@ohos.web.webview';
@Entry
@Component
struct SecureWebApp {
aboutToAppear() {
// 申请安全服务权限
this.requestSecurityPermission();
// 开启高级安全模式,禁用所有高风险功能
webview.WebviewController.enableAdvancedSecurityMode({
enable: true,
disableWebAssembly: true, // 禁用WebAssembly
disableWebGL: true, // 禁用WebGL
disablePDFViewer: true, // 禁用PDF预览
disableMathML: true, // 禁用MathML
disableWebSpeechAPI: true, // 禁用语音API
disableRTCDataChannel: true, // 禁用RTC数据通道
disableMediaDevicesGetUserMedia: true, // 禁用摄像头麦克风
disableServiceWorker: true, // 禁用后台服务
disableNonProxyUDP: true, // 禁用非代理UDP
disableJITCompilation: true // 禁用即时编译
});
console.log('高级安全模式已启动,危险功能全关闭');
}
// 申请安全权限
private async requestSecurityPermission() {
const permission = 'ohos.permission.SECURITY_SERVICE';
const result = await abilityAccessCtrl.requestPermissionFromUser(permission);
if (result !== abilityAccessCtrl.GrantStatus.GRANTED) {
throw new Error('未获取安全服务权限,高级安全模式无法启用');
}
}
build() {
Web({ src: 'https://www.example.com' })
.controller(new webview.WebviewController())
.onPageStart(() => {
console.log('安全模式下页面开始加载,危险功能已拦截');
})
}
}
CSP就像小区门禁,只让白名单里的资源进门:
webview.WebviewController.setCSP({
// 默认只允许同源资源
'default-src': "'self'",
// 脚本允许同源和信任域名
'script-src': "'self' https://trusted-scripts.com",
// 样式表允许同源和信任域名
'style-src': "'self' https://trusted-styles.com",
// 图片允许所有安全来源
'img-src': "'self' https://*.example.com data:",
// 禁止加载任何弹窗
'frame-ancestors': "'none'"
});
禁止别人把咱的页面嵌到iframe里,防止点击劫持:
// 方式1:完全禁止嵌入
webview.WebviewController.setHttpHeader({
key: 'X-Frame-Options',
value: 'DENY'
});
// 方式2:只允许特定域名嵌入
webview.WebviewController.setHttpHeader({
key: 'X-Frame-Options',
value: 'ALLOW-FROM https://trusted-site.com'
});
告诉浏览器别瞎猜文件类型,防止恶意文件执行:
webview.WebviewController.setHttpHeader({
key: 'X-Content-Type-Options',
value: 'nosniff'
});
import { webview } from '@ohos.web.webview';
@Entry
@Component
struct FinanceWeb {
private controller = new webview.WebviewController();
aboutToAppear() {
// 1. 开启高级安全模式
this.enableAdvancedSecurity();
// 2. 配置严格CSP
this.setupStrictCSP();
// 3. 设置防劫持 headers
this.setupSecurityHeaders();
}
private enableAdvancedSecurity() {
webview.WebviewController.enableAdvancedSecurityMode({
enable: true,
// 金融App重点禁用危险功能
disableWebAssembly: true,
disableMediaDevicesGetUserMedia: true,
disableServiceWorker: true
});
}
private setupStrictCSP() {
webview.WebviewController.setCSP({
'default-src': "'self'",
'script-src': "'self' https://finance-api.com",
'style-src': "'self' https://fonts.googleapis.com",
'frame-ancestors': "'none'", // 禁止嵌入
'connect-src': "'self' wss://finance-api.com" // 只允许安全WebSocket
});
}
private setupSecurityHeaders() {
// 防点击劫持
webview.WebviewController.setHttpHeader({ key: 'X-Frame-Options', value: 'DENY' });
// 防MIME混淆
webview.WebviewController.setHttpHeader({ key: 'X-Content-Type-Options', value: 'nosniff' });
// 额外加个防XSS的Header
webview.WebviewController.setHttpHeader({ key: 'X-XSS-Protection', value: '1; mode=block' });
}
build() {
Web({ src: 'https://finance.example.com' })
.controller(this.controller)
.onResourceLoadFailed((event) => {
if (event.isBlockedBySecurityMode) {
console.log(`危险资源被安全模式拦截: ${event.url}`);
}
})
}
}
不是所有功能都要禁,按应用场景来:
应用类型 | 重点禁用功能 | 为啥? |
---|---|---|
金融类 | WebAssembly、摄像头、语音API | 防代码注入和隐私泄露 |
教育类 | PDF预览、Service Worker | 防恶意文件和缓存篡改 |
工具类 | WebGL、RTCDataChannel | 防图形漏和通信劫持 |
功能回归测试:
安全测试:
性能测试:
白屏问题:
script-src
是否漏掉必要域名功能异常:
权限申请失败:
module.json5
是否声明ohos.permission.SECURITY_SERVICE
兄弟们,ArkWeb的高级安全模式就像给Web应用加了多重防盗门:
记住,安全不是一次性工作,得持续优化:
把这些做好,咱的Web应用就能在安全的大道上狂奔,用户用得放心,咱也省心!