微信小程序的許多業(yè)務(wù)場景需要通過UGC(用戶產(chǎn)生內(nèi)容)的方式,比如昵稱/花名、個人資料簽名/日志/聊天/評論、頭像/表情/相片、直播等各種場景,其格式內(nèi)容包括但不限于短文本、長內(nèi)容、圖片或視頻等來實現(xiàn)更好的用戶體驗或更豐富的內(nèi)容功能和服務(wù)場景。但是如果這類功能的使用如果沒有做好對用戶發(fā)布內(nèi)容的安全審查,可能會產(chǎn)生政治有害等違法違規(guī)的內(nèi)容。一旦被利用進行傳播,對小程序用戶帶來有損的體驗,小程序開發(fā)者也可能因此承擔平臺或法律的追責及處罰。因此包含UGC功能的小程序都需要有內(nèi)容安全檢測。
使用開發(fā)者工具新建一個云函數(shù),如msgsec,然后在config.json里添加security.msgSecCheck云調(diào)用的權(quán)限,使用npm install安裝依賴之后,上傳并部署所有文件(此時也會更新權(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級
完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以及檢測的圖片不能大于1M這樣的一個限制,當圖片尺寸比較大時,我們需要對圖片進行壓縮處理。而且要檢測的圖片文件的格式為PNG、JPEG、JPG、GIF,圖片尺寸不超過 750px x 1334px。通常情況下我們使用小程序端chooseImage上傳圖片時,我們盡量要求使用compressed壓縮圖,相冊的壓縮圖一般都不會超過1M。
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
}
}
云調(diào)用在圖像內(nèi)容安全處理方面,功能有一些不足的地方(比如沒有細分涉黃、涉政、涉暴恐以及廣告引導(dǎo)類),在限制上有一點嚴格(對圖片的大小有嚴格的要求),建議大家安裝云開發(fā)圖像安全審核的拓展能力。
它的安裝方式在云調(diào)用與拓展能力章節(jié)有介紹,而使用方式上一節(jié)圖像處理的拓展能力是一脈相承的,有著相同的使用方法,這是因為圖像內(nèi)容安全就是圖像處理的一部分。所以要使用圖像內(nèi)容安全拓展能力建議先閱讀之前的內(nèi)容,這里只給出實際的代碼。
首先我們參考上一節(jié)內(nèi)容構(gòu)建圖像處理的npm,然后再在imgprocess.js里引入包以及在Page函數(shù)里寫一個事件處理函數(shù)。圖像安全審核只能后置校驗,也就是只能對已經(jīng)上傳到云存儲的圖片進行內(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(涉黃識別)、terrorist(涉暴恐識別)、politics(涉政識別)、ads(廣告識別),我們可以像上面四個一起寫,也可以只寫其中的幾個,用逗號,
隔開即可。
打印res.data,內(nèi)有RecognitionResult的對象,會顯示圖片內(nèi)容審核的結(jié)果,下面顯示帶有商業(yè)廣告:
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: "淘寶"}
}
在小程序端審核圖片,我們可以先上傳圖片到云存儲,然后獲取圖片在云存儲的cloudPath(不是fileID,是相對云存儲的絕對路徑),再對圖片進行審核,審核成功才予以顯示,審核失敗就刪除該圖片,讓用戶重新上傳。
使用開發(fā)者工具新建一個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)
}
}
更多建議: