0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙數(shù)據(jù)防泄漏DLP Data Loss Prevention Kit開(kāi)發(fā)指導(dǎo)

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-07-03 21:42 ? 次閱讀

Data Loss Prevention Kit開(kāi)發(fā)指導(dǎo)

DLP是系統(tǒng)提供的系統(tǒng)級(jí)的數(shù)據(jù)防泄漏解決方案,提供一種稱(chēng)為DLP的文件格式。后綴格式為“原始文件名(包含原始文件后綴).dlp”,例如: “test.docx.dlp”,文件由授權(quán)憑證和原始文件密文組成。

通過(guò)端云協(xié)同認(rèn)證(需要聯(lián)網(wǎng))來(lái)獲取文件的訪問(wèn)授權(quán),授權(quán)類(lèi)型包含只讀、編輯、文件擁有者三種。

  • 只讀:能讀取文件內(nèi)容但不能修改。
  • 編輯:能夠讀寫(xiě)文件內(nèi)容,但不能修改文件權(quán)限配置。
  • 文件擁有者:可讀寫(xiě)文件、修改權(quán)限配置、恢復(fù)原始原始文件等。
  • 開(kāi)發(fā)前請(qǐng)熟悉鴻蒙開(kāi)發(fā)指導(dǎo)文檔gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md點(diǎn)擊或者復(fù)制轉(zhuǎn)到。

應(yīng)用需要訪問(wèn)DLP文件時(shí),系統(tǒng)會(huì)自動(dòng)安裝應(yīng)用的DLP沙箱分身應(yīng)用,相當(dāng)于完全獨(dú)立的應(yīng)用,數(shù)據(jù)和配置會(huì)繼承原應(yīng)用,但相互之間并不共享。分身應(yīng)用在運(yùn)行時(shí)會(huì)處于DLP沙箱環(huán)境中,訪問(wèn)外部的權(quán)限會(huì)被限制,以防止數(shù)據(jù)的泄漏。每當(dāng)打開(kāi)一個(gè)新的DLP文件會(huì)生成一個(gè)應(yīng)用沙箱分身,沙箱應(yīng)用之間也是相互隔離的,當(dāng)應(yīng)用關(guān)閉后應(yīng)用分身會(huì)自動(dòng)卸載,沙箱期間產(chǎn)生的臨時(shí)數(shù)據(jù)也會(huì)丟棄。

正常情況下,應(yīng)用不會(huì)感知到沙箱的存在,訪問(wèn)的也是解密后的明文,和訪問(wèn)普通文件沒(méi)有區(qū)別,但由于DLP沙箱會(huì)限制其訪問(wèn)外部的權(quán)限(例如網(wǎng)絡(luò)、剪切板、截屏、錄屏、藍(lán)牙等)。為了更好的用戶(hù)體驗(yàn),需要應(yīng)用進(jìn)行適配,例如文件只讀的情況下,不應(yīng)顯示“保存”按鈕,不應(yīng)主動(dòng)聯(lián)網(wǎng)等。

沙箱限制

當(dāng)應(yīng)用進(jìn)入DLP沙箱狀態(tài)時(shí),可以申請(qǐng)的權(quán)限將受到限制,根據(jù)DLP文件授權(quán)類(lèi)型不同,限制也不相同,如下表:

權(quán)限名說(shuō)明授權(quán)類(lèi)型:只讀授權(quán)類(lèi)型:編輯/文件擁有者
ohos.permission.USE_BLUETOOTH允許應(yīng)用使用藍(lán)牙。禁止禁止
ohos.permission.INTERNET允許應(yīng)用訪問(wèn)網(wǎng)絡(luò)。禁止禁止
ohos.permission.DISTRIBUTED_DATASYNC允許應(yīng)用與遠(yuǎn)程設(shè)備交換用戶(hù)數(shù)據(jù)(如圖片、音樂(lè)、視頻、及應(yīng)用數(shù)據(jù)等)。禁止禁止
ohos.permission.WRITE_MEDIA應(yīng)用讀寫(xiě)用戶(hù)媒體文件,如視頻、音頻、圖片等,需要申請(qǐng)此權(quán)限。禁止允許
ohos.permission.NFC_TAG允許應(yīng)用使用NFC。禁止允許

接口說(shuō)明

接口名描述
isDLPFile(fd: number): Promise isDLPFile(fd: number, callback: AsyncCallback): void判斷是否是dlp文件
getDLPPermissionInfo(): Promise getDLPPermissionInfo(callback: AsyncCallback): void獲取當(dāng)前沙箱應(yīng)用的權(quán)限類(lèi)型
getOriginalFileName(fileName: string): string獲取dlp文件原始文件名
getDLPSuffix(): string獲取dlp文件dlp后綴名
on(type: 'openDLPFile', listener: Callback): void注冊(cè)dlp文件打開(kāi)事件監(jiān)聽(tīng),用于原始應(yīng)用獲取dlp文件打開(kāi)事件
off(type: 'openDLPFile', listener?: Callback): void取消dlp文件打開(kāi)事件監(jiān)聽(tīng)
isInSandbox(): Promise isInSandbox(callback: AsyncCallback): void判斷當(dāng)前是否是dlp沙箱應(yīng)用
getDLPSupportedFileTypes(): Promise> getDLPSupportedFileTypes(callback: AsyncCallback>): void獲取當(dāng)前系統(tǒng)支持添加權(quán)限保護(hù)的文件格式類(lèi)型
setRetentionState(docUris: Array): Promise setRetentionState(docUris: Array, callback: AsyncCallback): void設(shè)置dlp分身應(yīng)用保留狀態(tài)
cancelRetentionState(docUris: Array): Promise cancelRetentionState(docUris: Array, callback: AsyncCallback): void取消dlp分享應(yīng)用保留狀態(tài)
getRetentionSandboxList(bundleName?: string): Promise> getRetentionSandboxList(bundleName: string, callback: AsyncCallback>): void getRetentionSandboxList(callback: AsyncCallback>): void獲取當(dāng)前保留沙箱列表
getDLPFileAccessRecords(): Promise> getDLPFileAccessRecords(callback: AsyncCallback>): void獲取dlp文件訪問(wèn)記錄
setSandboxAppConfig(configInfo: string): Promise設(shè)置沙箱應(yīng)用配置信息
getSandboxAppConfig(): Promise查詢(xún)沙箱應(yīng)用配置信息
cleanSandboxAppConfig(): Promise清理沙箱應(yīng)用配置信息
startDLPManagerForResult(context: common.UIAbilityContext, want: Want): Promise在當(dāng)前UIAbility界面以無(wú)邊框形式打開(kāi)DLP權(quán)限管理應(yīng)用(只支持Stage模式)

開(kāi)發(fā)步驟

  1. 引入[dlpPermission]模塊。

    import { dlpPermission } from '@kit.DataLossPreventionKit';
    
  2. 打開(kāi)DLP文件,系統(tǒng)會(huì)自動(dòng)安裝應(yīng)用的DLP沙箱分身應(yīng)用。以下代碼應(yīng)在應(yīng)用頁(yè)Ability中使用。

    async OpenDlpFile(dlpUri: string, fileName: string, fd: number) {
      let want:Want = {
        "action": "ohos.want.action.viewData",
        "bundleName": "com.example.example_bundle_name",
        "abilityName": "exampleAbility",
        "uri": dlpUri,
        "parameters": {
          "fileName": {
            "name": fileName
          },
          "keyFd": {
            "type": "FD",
            "value": fd
          }
        }
      }
    
      try {
        console.log('openDLPFile:' + JSON.stringify(want));
        console.log('openDLPFile: delegator:' + JSON.stringify(this.context));
        this.context.startAbility(want);
      } catch (err) {
        console.error('openDLPFile startAbility failed', (err as BusinessError).code, (err as BusinessError).message);
        return;
      }
    }
    

    以上代碼需要在module.json5文件中增加ohos.want.action.viewData:

    "skills":[
        {
          "entities":[
            ...
          ],
          "actions":[
            ...
            "ohos.want.action.viewData"
          ]
        }
      ]
    
  3. 查詢(xún)當(dāng)前應(yīng)用是否在沙箱中。

    dlpPermission.isInSandbox().then((data)= > {
      console.log('isInSandbox, result: ' + JSON.stringify(data));
    }).catch((err:BusinessError) = > {
      console.log('isInSandbox: ' + JSON.stringify(err));
    });
    
  4. 查詢(xún)當(dāng)前編輯的文件權(quán)限,根據(jù)文件授權(quán)的不同,DLP沙箱被限制的權(quán)限有所不同,參考[沙箱限制]

    dlpPermission.getDLPPermissionInfo().then((data)= > {
      console.log('getDLPPermissionInfo, result: ' + JSON.stringify(data));
    }).catch((err:BusinessError) = > {
      console.log('getDLPPermissionInfo: ' + JSON.stringify(err));
    });
    
  5. 獲取當(dāng)前可支持DLP方案的文件擴(kuò)展名類(lèi)型列表,用于應(yīng)用判斷能否生成DLP文件,可用在實(shí)現(xiàn)類(lèi)似文件管理器設(shè)置DLP權(quán)限的場(chǎng)景。

    dlpPermission.getDLPSupportedFileTypes((err, result) = > {
      console.log('getDLPSupportedFileTypes: ' + JSON.stringify(err));
      console.log('getDLPSupportedFileTypes: ' + JSON.stringify(result));
    });
    
  6. 判斷當(dāng)前打開(kāi)文件是否是DLP文件。

    import { dlpPermission } from '@kit.DataLossPreventionKit';
    import { fileIo } from '@kit.CoreFileKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    
    let uri = "file://docs/storage/Users/currentUser/Desktop/test.txt.dlp";
    let file = fileIo.openSync(uri);
    try {
      let res = dlpPermission.isDLPFile(file.fd); // 是否加密DLP文件
      console.info('res', res);
    } catch (err) {
      console.error('error', (err as BusinessError).code, (err as BusinessError).message); // 失敗報(bào)錯(cuò)
    }
    fileIo.closeSync(file);
    
  7. 訂閱、取消訂閱DLP打開(kāi)事件。

    event(info: dlpPermission.AccessedDLPFileInfo) {
      console.info('openDlpFile event', info.uri, info.lastOpenTime)
    }
    unSubscribe() {
      try {
        dlpPermission.off('openDLPFile', this.event); // 取消訂閱
      } catch (err) {
        console.error('error', (err as BusinessError).code, (err as BusinessError).message); // 失敗報(bào)錯(cuò)
      }
    }
    subscribe() {
      try {
        dlpPermission.on('openDLPFile', this.event); // 訂閱
      } catch (err) {
        console.error('error', (err as BusinessError).code, (err as BusinessError).message); // 失敗報(bào)錯(cuò)
      }
    }
    onCreate() {
     this.subscribe();
    }
    onDestroy() {
     this.unSubscribe();
    }
    
  8. 獲取DLP文件打開(kāi)記錄。

    async getDLPFileAccessRecords() {
      try {
        let res:Array< dlpPermission.AccessedDLPFileInfo > = await dlpPermission.getDLPFileAccessRecords(); // 獲取DLP訪問(wèn)列表
        console.info('res', JSON.stringify(res))
      } catch (err) {
        console.error('error', (err as BusinessError).code, (err as BusinessError).message); // 失敗報(bào)錯(cuò)
      }
    }
    
  9. 獲取DLP文件保留沙箱記錄。

    async getRetentionSandboxList() {
      try {
        let res:Array< dlpPermission.RetentionSandboxInfo > = await dlpPermission.getRetentionSandboxList(); // 獲取沙箱保留列表
        console.info('res', JSON.stringify(res))
      } catch (err) {
        console.error('error', (err as BusinessError).code, (err as BusinessError).message); // 失敗報(bào)錯(cuò)
      }
    }
    
  10. 設(shè)置沙箱應(yīng)用配置信息。

async setSandboxAppConfig() {
  try {
    await dlpPermission.setSandboxAppConfig('configInfo'); // 設(shè)置沙箱應(yīng)用配置信息
  } catch (err) {
    console.error('error', (err as BusinessError).code, (err as BusinessError).message); // 失敗報(bào)錯(cuò)
  }
}
  1. 清理沙箱應(yīng)用配置信息。
async cleanSandboxAppConfig() {
  try {
    await dlpPermission.cleanSandboxAppConfig(); // 清理沙箱應(yīng)用配置信息
  } catch (err) {
    console.error('error', (err as BusinessError).code, (err as BusinessError).message); // 失敗報(bào)錯(cuò)
  }
}
  1. 查詢(xún)沙箱應(yīng)用配置信息。
async getSandboxAppConfig() {
  try {
    let res:string = await dlpPermission.getSandboxAppConfig(); // 查詢(xún)沙箱應(yīng)用配置信息
    console.info('res', JSON.stringify(res))
  } catch (err) {
    console.error('error', (err as BusinessError).code, (err as BusinessError).message); // 失敗報(bào)錯(cuò)
  }
}
  1. 以無(wú)邊框形式打開(kāi)DLP權(quán)限管理應(yīng)用。此方法只能在UIAbility上下文中調(diào)用,只支持Stage模式。
import { dlpPermission } from '@kit.DataLossPreventionKit';
import { common, UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

try {
  let context = getContext() as common.UIAbilityContext; // 獲取當(dāng)前UIAbilityContext
  let want: Want = {
    "uri": "file://docs/storage/Users/currentUser/Desktop/1.txt",
    "parameters": {
      "displayName": "1.txt"
    }
  }; // 請(qǐng)求參數(shù)
  dlpPermission.startDLPManagerForResult(context, want).then((res) = > {
    console.info('res.resultCode', res.resultCode);
    console.info('res.want', JSON.stringify(res.want));
  }); // 打開(kāi)DLP權(quán)限管理應(yīng)用
} catch (err) {
  console.error('error', err.code, err.message); // 失敗報(bào)錯(cuò)
}

`HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`

搜狗高速瀏覽器截圖20240326151344.png
14. 查詢(xún)當(dāng)前系統(tǒng)是否提供DLP特性。

import { dlpPermission } from '@kit.DataLossPreventionKit';
import { BusinessError } from '@kit.BasicServicesKit';

dlpPermission.isDLPFeatureProvided().then((res) = > {
  console.info('res', JSON.stringify(res));
}).catch((err: BusinessError) = > {
  console.error('error', (err as BusinessError).code, (err as BusinessError).message); // 失敗報(bào)錯(cuò)
});

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6819

    瀏覽量

    88746
  • dlp
    dlp
    +關(guān)注

    關(guān)注

    6

    文章

    371

    瀏覽量

    61118
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2303

    瀏覽量

    42691
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    USB開(kāi)發(fā)指導(dǎo)資料

    USB開(kāi)發(fā)指導(dǎo)資料[hide][/hide]
    發(fā)表于 04-17 00:00

    Silicon、IDE開(kāi)發(fā)指導(dǎo)

    Silicon、IDE開(kāi)發(fā)指導(dǎo)手冊(cè),希望對(duì)大家有所幫助。
    發(fā)表于 01-09 14:45

    EK140P使用及開(kāi)發(fā)指導(dǎo)

    MY-IMX6-EK140P 使用及開(kāi)發(fā)指導(dǎo)[size=0.87em]目錄 [隱藏] 1本文檔使用說(shuō)明2第一部分 開(kāi)發(fā)板使用快速入門(mén)3第二部分 軟件開(kāi)發(fā)基本指導(dǎo)4第三部分 軟件
    發(fā)表于 12-03 16:53

    【HarmonyOS】HarmonyOS子系統(tǒng)開(kāi)發(fā)指導(dǎo)

    子系統(tǒng)開(kāi)發(fā)主要從三個(gè)方面進(jìn)行指導(dǎo),分別是圖形圖像類(lèi)子系統(tǒng)開(kāi)發(fā)指導(dǎo),相機(jī)子系統(tǒng)開(kāi)發(fā)指導(dǎo)和音視頻子系統(tǒng)開(kāi)發(fā)指導(dǎo)。圖形圖像容器類(lèi)組件
    發(fā)表于 09-21 14:50

    RSA數(shù)據(jù)丟失解決方案

    RSA Data Loss Prevention (DLP) Datacenter產(chǎn)品幫助Microsoft加快了遵守管理法規(guī)要求的步伐,并讓他們可以發(fā)現(xiàn)
    發(fā)表于 04-05 23:00 ?17次下載

    基于GoKit的產(chǎn)品開(kāi)發(fā)指導(dǎo)

    基于GoKit的產(chǎn)品開(kāi)發(fā)指導(dǎo),有板子的可以下載看看的
    發(fā)表于 11-16 19:00 ?0次下載

    ZigBee2007視頻教程-應(yīng)用開(kāi)發(fā)指導(dǎo)

    ZigBee2007視頻教程-應(yīng)用開(kāi)發(fā)指導(dǎo)ZigBee2007視頻教程-應(yīng)用開(kāi)發(fā)指導(dǎo)ZigBee2007視頻教程-應(yīng)用開(kāi)發(fā)指導(dǎo)ZigBee2007視頻教程-應(yīng)用開(kāi)發(fā)指導(dǎo)
    發(fā)表于 12-29 10:31 ?19次下載

    TI DM388評(píng)估模塊和開(kāi)發(fā)開(kāi)發(fā)指導(dǎo)手冊(cè)

    TI DM388評(píng)估模塊和開(kāi)發(fā)開(kāi)發(fā)指導(dǎo)手冊(cè)
    發(fā)表于 11-25 18:06 ?15次下載

    LTC4412: Low Loss PowerPath Controller in ThinSOT Data Sheet

    LTC4412: Low Loss PowerPath Controller in ThinSOT Data Sheet
    發(fā)表于 01-29 08:50 ?8次下載
    LTC4412: Low <b class='flag-5'>Loss</b> PowerPath Controller in ThinSOT <b class='flag-5'>Data</b> Sheet

    IP百科知識(shí)之DLP

    DLPData Loss Prevention數(shù)據(jù)泄漏防護(hù),是一組技術(shù)的集合組成的解決方案,
    的頭像 發(fā)表于 09-08 18:24 ?4587次閱讀

    Ping32數(shù)據(jù)泄漏(DLP : Data Loss Prevention)解決方案

    ing32可以規(guī)范、限制U盤(pán)、移動(dòng)硬盤(pán)等移動(dòng)存儲(chǔ)設(shè)備的使用,為移動(dòng)存儲(chǔ)設(shè)備設(shè)置不同的權(quán)限,比如:只讀、完全禁止使用等。這不僅切斷了通過(guò)這類(lèi)設(shè)備傳播病毒的途徑,更是杜絕了信息泄密風(fēng)險(xiǎn)。想為不同的移動(dòng)存儲(chǔ)設(shè)備設(shè)置不同的功能?沒(méi)問(wèn)題,通過(guò)Ping32的移動(dòng)存儲(chǔ)設(shè)備授權(quán),你可以為不同的移動(dòng)存儲(chǔ)設(shè)備設(shè)置不同的權(quán)限安全、便捷兩不誤!
    的頭像 發(fā)表于 08-20 11:16 ?1196次閱讀

    AN3307_遵循IEC60335_B級(jí)規(guī)范的STM32應(yīng)用開(kāi)發(fā)指導(dǎo)

    AN3307_遵循IEC60335_B級(jí)規(guī)范的STM32應(yīng)用開(kāi)發(fā)指導(dǎo)
    發(fā)表于 11-21 17:07 ?1次下載
    AN3307_遵循IEC60335_B級(jí)規(guī)范的STM32應(yīng)用<b class='flag-5'>開(kāi)發(fā)指導(dǎo)</b>

    使用 Taro 開(kāi)發(fā)鴻蒙原生應(yīng)用 —— 快速上手,鴻蒙應(yīng)用開(kāi)發(fā)指

    鴻蒙原生應(yīng)用。 在 《使用 Taro 開(kāi)發(fā)鴻蒙原生應(yīng)用》 系列文章中,我們已經(jīng)介紹了 鴻蒙的基本概念 和 Taro 適配鴻蒙的原理。本文作
    的頭像 發(fā)表于 02-02 16:09 ?803次閱讀
    使用 Taro <b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>鴻蒙</b>原生應(yīng)用 —— 快速上手,<b class='flag-5'>鴻蒙</b>應(yīng)用<b class='flag-5'>開(kāi)發(fā)指</b>南

    鴻蒙數(shù)據(jù)泄漏 DLP Data Loss Prevention Kit簡(jiǎn)介

    Data Loss Prevention Kit數(shù)據(jù)泄漏
    的頭像 發(fā)表于 07-03 20:33 ?357次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>防</b><b class='flag-5'>泄漏</b> <b class='flag-5'>DLP</b> <b class='flag-5'>Data</b> <b class='flag-5'>Loss</b> <b class='flag-5'>Prevention</b> <b class='flag-5'>Kit</b>簡(jiǎn)介

    DP83640寄存器及物理層接口開(kāi)發(fā)指導(dǎo)

    DP83640寄存器及物理層接口開(kāi)發(fā)指導(dǎo)
    發(fā)表于 07-08 14:58 ?0次下載