云開發(fā) 內(nèi)容安全檢測

2020-07-22 15:32 更新

微信小程序的許多業(yè)務(wù)場景需要通過UGC(用戶產(chǎn)生內(nèi)容)的方式,比如昵稱/花名、個(gè)人資料簽名/日志/聊天/評(píng)論、頭像/表情/相片、直播等各種場景,其格式內(nèi)容包括但不限于短文本、長內(nèi)容、圖片或視頻等來實(shí)現(xiàn)更好的用戶體驗(yàn)或更豐富的內(nèi)容功能和服務(wù)場景。但是如果這類功能的使用如果沒有做好對(duì)用戶發(fā)布內(nèi)容的安全審查,可能會(huì)產(chǎn)生政治有害等違法違規(guī)的內(nèi)容。一旦被利用進(jìn)行傳播,對(duì)小程序用戶帶來有損的體驗(yàn),小程序開發(fā)者也可能因此承擔(dān)平臺(tái)或法律的追責(zé)及處罰。因此包含UGC功能的小程序都需要有內(nèi)容安全檢測。

一、文字內(nèi)容安全

使用開發(fā)者工具新建一個(gè)云函數(shù),如msgsec,然后在config.json里添加security.msgSecCheck云調(diào)用的權(quán)限,使用npm install安裝依賴之后,上傳并部署所有文件(此時(shí)也會(huì)更新權(quán)限)。

{
  "permissions": {
    "openapi": [
      "security.imgSecCheck",
      "security.msgSecCheck"
    ]
  }
}

然后再在index.js里輸入以下代碼,

const cloud = require('wx-server-sdk')
cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV
  })
exports.main = async (event, context) => {
    try {
        const result = await cloud.openapi.security.msgSecCheck({
            content:`特3456書yuuo莞6543李zxcz蒜7782法fgnv級(jí)
            完2347全dfji試3726測asad感3847知qwez到`
        })
        return result
    } catch (error) {
        return error
    }
}

調(diào)用該云函數(shù),接口errcode返回87014(內(nèi)容含有違法違規(guī)內(nèi)容):

errMsg: "cloud.callFunction:ok", 
result: {
    errCode: 87014
    errMsg: "openapi.security.msgSecCheck:fail risky content hint: [bgh98a06644711]"}

而如果返回的result.errCode的值為0,說明內(nèi)容正常。

errMsg: "cloud.callFunction:ok"
result: {
    errMsg: "openapi.security.msgSecCheck:ok",
    errCode: 0}

二、圖片鑒黃

圖片內(nèi)容安全檢測和文字內(nèi)容安全檢測最大的不同在于,我們需要考慮圖片傳輸?shù)暮臅r(shí)以及檢測的圖片不能大于1M這樣的一個(gè)限制,當(dāng)圖片尺寸比較大時(shí),我們需要對(duì)圖片進(jìn)行壓縮處理。而且要檢測的圖片文件的格式為PNG、JPEG、JPG、GIF,圖片尺寸不超過 750px x 1334px。通常情況下我們使用小程序端chooseImage上傳圖片時(shí),我們盡量要求使用compressed壓縮圖,相冊(cè)的壓縮圖一般都不會(huì)超過1M。

  • 如果圖片比較小(大約200k以內(nèi)),我們可以直接把圖片存儲(chǔ)到云存儲(chǔ)里,然后在云函數(shù)里下載該圖片進(jìn)行圖片安全檢測;

  • 如果圖片比較大(比如大于100k,小于1M),我們可以把圖片存儲(chǔ)到云存儲(chǔ)之后,在云函數(shù)端下載該圖片,使用前面所說的Sharp模塊,對(duì)圖片進(jìn)行壓縮處理,然后進(jìn)行圖片安全檢測。

  • 如果圖片大于1M,那圖片的壓縮就不建議在云函數(shù)端處理,要在小程序端使用Canvas進(jìn)行壓縮,然后再傳輸?shù)皆坪瘮?shù)端進(jìn)行安全檢測。

const cloud = require('wx-server-sdk')
cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV
  })
exports.main = async (event, context) => {
  const fileID = 'cloud://xly-xrlur.786c-xly-xrlur-1300446086/1572315793628-366.png'
  const res = await cloud.downloadFile({
    fileID: fileID,
  })
  const Buffer = res.fileContent
  try {
    const result = await cloud.openapi.security.imgSecCheck({
      media: {
        contentType: 'image/png',
        value: Buffer
      }
    })
    return result
   } catch (error) {
    return error
  }
}

三、圖像內(nèi)容安全拓展能力

云調(diào)用在圖像內(nèi)容安全處理方面,功能有一些不足的地方(比如沒有細(xì)分涉黃、涉政、涉暴恐以及廣告引導(dǎo)類),在限制上有一點(diǎn)嚴(yán)格(對(duì)圖片的大小有嚴(yán)格的要求),建議大家安裝云開發(fā)圖像安全審核的拓展能力。

它的安裝方式在云調(diào)用與拓展能力章節(jié)有介紹,而使用方式上一節(jié)圖像處理的拓展能力是一脈相承的,有著相同的使用方法,這是因?yàn)閳D像內(nèi)容安全就是圖像處理的一部分。所以要使用圖像內(nèi)容安全拓展能力建議先閱讀之前的內(nèi)容,這里只給出實(shí)際的代碼。

1、在小程序端使用圖像安全審核

首先我們參考上一節(jié)內(nèi)容構(gòu)建圖像處理的npm,然后再在imgprocess.js里引入包以及在Page函數(shù)里寫一個(gè)事件處理函數(shù)。圖像安全審核只能后置校驗(yàn),也就是只能對(duì)已經(jīng)上傳到云存儲(chǔ)的圖片進(jìn)行內(nèi)容安全審核,方法如下:

const extCi = require("./../../miniprogram_npm/@cloudbase/extension-ci-wxmp");
Page({
  async imgSec(){
    extCi.invoke({
      action: "DetectType",
      cloudPath: "tcbdemo.jpg", 
      operations: {
        type: 'porn,ads,terrorist,politics'
      }
    }).then(res => {
        console.log(res.data);
    }).catch(err => {
        console.log(err);
    })
  }
})

這里的type為內(nèi)容審核的類型,porn(涉黃識(shí)別)、terrorist(涉暴恐識(shí)別)、politics(涉政識(shí)別)、ads(廣告識(shí)別),我們可以像上面四個(gè)一起寫,也可以只寫其中的幾個(gè),用逗號(hào),隔開即可。

打印res.data,內(nèi)有RecognitionResult的對(duì)象,會(huì)顯示圖片內(nèi)容審核的結(jié)果,下面顯示帶有商業(yè)廣告:

  • HitFlag,表示是否命中:0(未命中),1(命中),2(疑似);

  • Score,審核分值:0 - 60分(正常),60 - 90分(疑似敏感),90 - 100分(確定敏感)

  • Label,為識(shí)別的標(biāo)簽

RecognitionResult{
  PornInfo: {Code: 0, Msg: "OK", HitFlag: 0, Score: 14, Label: ""}
  TerroristInfo: {Code: 0, Msg: "OK", HitFlag: 0, Score: 0, Label: ""}
  PoliticsInfo: {Code: 0, Msg: "OK", HitFlag: 0, Score: 26, Label: ""}
  AdsInfo: {Code: 0, Msg: "OK", HitFlag: 1, Score: 98, Label: "淘寶"}
}

在小程序端審核圖片,我們可以先上傳圖片到云存儲(chǔ),然后獲取圖片在云存儲(chǔ)的cloudPath(不是fileID,是相對(duì)云存儲(chǔ)的絕對(duì)路徑),再對(duì)圖片進(jìn)行審核,審核成功才予以顯示,審核失敗就刪除該圖片,讓用戶重新上傳。

2、在云函數(shù)端使用圖像安全審核

使用開發(fā)者工具新建一個(gè)imgSec的云函數(shù),然后在package.json里添加latest最新版的@cloudbase/extension-ci,并右鍵云函數(shù)目錄選擇在終端中打開輸入命令npm install安裝依賴:

"dependencies": {
  "wx-server-sdk": "latest",
  "@cloudbase/extension-ci": "latest"
}

然后再在index.js里輸入以下代碼,代碼的具體含義可以參考小程序端的內(nèi)容講解:

const cloud = require('wx-server-sdk')
cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV
  })
const extCi = require('@cloudbase/extension-ci')
cloud.registerExtension(extCi)
async function imgSec() {
  try {
    const res = await app.invokeExtension('CloudInfinite', {
      action: 'DetectType',
      cloudPath: 'tcbdemo.png', 
      operations: {
        type: 'porn,ads,terrorist,politics'
      }
    })
    console.log(res)
    return res
  } catch (err) {
    console.log(err)
  }
}

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)