Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lich流
unidocs-zh
提交
0a681977
U
unidocs-zh
项目概览
lich流
/
unidocs-zh
与 Fork 源项目一致
Fork自
DCloud / unidocs-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0a681977
编写于
4月 24, 2023
作者:
VK1688
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Create uni-sec-check.md
上级
9b002c33
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
290 addition
and
0 deletion
+290
-0
docs/uniCloud/uni-sec-check.md
docs/uniCloud/uni-sec-check.md
+290
-0
未找到文件。
docs/uniCloud/uni-sec-check.md
0 → 100644
浏览文件 @
0a681977
## uni-sec-check 公共模块
`uni-sec-check`
是一个开源公共模块,用于帮助开发者进行内容安全检测,包括图片鉴黄和文字违规检测。在各种需要用户上传图片或录入文字到数据库的场景中,内容安全检测是非常必要的。通过使用该模块,您可以有效降低内容违规风险。”
本模块设计了provider概念,计划集成多家提供内容安全服务的供应商。
目前支持的provider:
1.
mp-weixin(免费,微信小程序官方提供)
> 即目前只有微信内容安全检测一个provider
::: warning 注意
uni-sec-check公共模块仅能在云函数/云对象内使用。如果您不了解公共模块,请
[
参阅
](
cf-common.md
)
本插件依赖uni-open-bridge-common,且版本需≥1.1.2
:::
> 插件市场地址:[https://ext.dcloud.net.cn/plugin?name=uni-sec-check](https://ext.dcloud.net.cn/plugin?name=uni-sec-check)
## 使用前必看
由于微信小程序官方宣布于2021年9月1日停止更新V1版本,以至于V1版本的违规检测能力已经非常弱,几乎无用。
为了解决这个问题,
`uni-sec-check`
已经升级到微信V2版本(同样免费),提供更强大的违规检测能力。然而,升级到V2版本也带来了一些问题,具体如下:
1.
V2版本必须传递微信小程序用户的openid,且用户需要在近两小时内访问过小程序。因此,V2版本只适用于微信小程序,其他端无法正常使用。
2.
V2版本新增了一个scene参数,scene的取值不同,最终的检测结果也不同。因此,为了获得更好的检测结果,您需要传递合适的scene值。
3.
与之前的版本不同,V2版本检测图片不会实时返回结果,而是需要等待5-30分钟后异步回调返回结果。如果您需要更多信息,请参考
[
微信检测结果异步通知示例
](
#微信检测结果异步通知示例
)
## 配置@config
`uni-sec-check`
自身没有配置文件,Ta依赖
`uni-open-bridge`
的配置
[
点击查看uni-open-bridge配置
](
https://uniapp.dcloud.net.cn/uniCloud/uni-open-bridge.html#uni-open-bridge%E7%9A%84%E4%BD%BF%E7%94%A8%E6%B5%81%E7%A8%8B
)
## API@api
### 检测文本@textSecCheck
**用法**
```
js
// 引入uni-sec-check公共模块
const
UniSecCheck
=
require
(
'
uni-sec-check
'
);
// 初始化实例
const
uniSecCheck
=
new
UniSecCheck
({
provider
:
'
mp-weixin
'
,
requestId
:
this
.
getUniCloudRequestId
(),
// 云函数内则写 context.requestId 云对象内则写 this.getUniCloudRequestId()
});
const
checkRes
=
await
uniSecCheck
.
textSecCheck
({
content
:
''
,
// 文本内容,不可超过500KB
openid
:
''
,
// 用户的小程序openid
scene
:
2
,
// 场景值
version
:
2
,
// 固定为2
});
console
.
log
(
'
checkRes:
'
,
checkRes
);
```
**请求参数**
|名称 |类型 |必填 |说明 |
|-- |-- |-- |-- |
|content|String |是 |文本内容,不可超过500KB |
|openid |String |否 |用户的小程序openid(用户需在近两小时访问过小程序) version=2时必填 |
|scene |Number |否 |场景值(1 资料;2 评论;3 论坛;4 社交日志) |
|version|Number |是 |接口版本号固定为2 |
**返回参数**
|名称 |类型 |必填 |说明 |
|-- |-- |-- |-- |
|errCode|String |是 |错误码,见下方错误码说明 |
|errMsg |String |是 |错误信息 |
|result |Object |是 |检测结果 |
**result说明**
|名称 |类型 |必填 |说明 |
|-- |-- |-- |-- |
|suggest|String |是 |建议;pass:通过,review:疑似,risky:有风险 |
|label |String |是 |分类信息;广告,时政,色情,辱骂,违法犯罪,欺诈,低俗,版权,其他 |
### 检测图片@imgSecCheck
**用法**
```
js
// 引入uni-sec-check公共模块
const
UniSecCheck
=
require
(
'
uni-sec-check
'
);
// 初始化实例
const
uniSecCheck
=
new
UniSecCheck
({
provider
:
'
mp-weixin
'
,
requestId
:
this
.
getUniCloudRequestId
(),
// 云函数内则写 context.requestId 云对象内则写 this.getUniCloudRequestId()
});
const
checkRes
=
await
uniSecCheck
.
imgSecCheck
({
image
:
''
,
// 图片文件url或图片cloudID
openid
:
''
,
// 用户的openid
scene
:
2
,
// 场景值
version
:
2
// 接口版本号
});
console
.
log
(
'
checkRes:
'
,
checkRes
);
```
**请求参数**
|名称 |类型 |必填 |说明 |
|-- |-- |-- |-- |
|image |String |是 |图片url或图片对应的cloudID |
|openid |String |否 |用户的openid(用户需在近两小时访问过小程序)version=2时必填|
|scene |Number |否 |场景值(1 资料;2 评论;3 论坛;4 社交日志) |
|version|Number |是 |接口版本号可选1或2,但1的检测能力很弱 |
**返回参数**
|名称 |类型 |必填 |说明 |
|-- |-- |-- |-- |
|errCode|String |是 |错误码,见下方错误码说明 |
|errMsg |String |是 |错误信息 |
|traceId|String |是 |唯一请求标识,标记单次请求,用于匹配异步推送结果 |
**注意**
-
V2的检测结果是异步返回的,需要提前在微信公众平台「开发」-「开发设置」-「消息推送」开启消息服务,检测结果在 30 分钟内会推送到你的消息接收服务器。
### 检测音频@avSecCheck
**用法**
```
js
// 引入uni-sec-check公共模块
const
UniSecCheck
=
require
(
'
uni-sec-check
'
);
// 初始化实例
const
uniSecCheck
=
new
UniSecCheck
({
provider
:
'
mp-weixin
'
,
requestId
:
this
.
getUniCloudRequestId
(),
// 云函数内则写 context.requestId 云对象内则写 this.getUniCloudRequestId()
});
const
checkRes
=
await
uniSecCheck
.
avSecCheck
({
mediaUrl
:
''
,
// 音频文件url
openid
:
''
,
// 用户的openid
scene
:
2
,
// 场景值
version
:
2
,
// 固定为2
});
console
.
log
(
'
checkRes:
'
,
checkRes
);
```
**请求参数**
|名称 |类型 |必填 |说明 |
|-- |-- |-- |-- |
|mediaUrl |String |是 |音频文件url;格式支持:mp3, aac, ac3, wma, flac, vorbis, opus, wav |
|openid |String |是 |用户的小程序openid(用户需在近两小时访问过小程序) |
|scene |Number |否 |场景值(1 资料;2 评论;3 论坛;4 社交日志) |
|version |Number |是 |接口版本号固定为2 |
**返回参数**
|名称 |类型 |必填 |说明 |
|-- |-- |-- |-- |
|errCode|String |是 |错误码,见下方错误码说明 |
|errMsg |String |是 |错误信息 |
|traceId|String |是 |唯一请求标识,标记单次请求,用于匹配异步推送结果 |
## 微信检测结果异步通知示例
在微信公众平台「开发」-「开发设置」-「消息推送」中,启用消息服务,提前保存好
`EncodingAESKey`
与
`token`
等信息。(此处不涉及微信验证服务器,请自行参考微信文档)
新建云函数(需开启云函数URL化)用于接收微信服务器通知消息,示例代码如下(代码仅供参考,未处理异常):
```
js
const
crypto
=
require
(
'
crypto
'
)
function
getSignature
(
token
,
timestamp
,
nonce
,
msgEncrypt
)
{
const
str
=
[
token
,
timestamp
,
nonce
,
msgEncrypt
].
sort
().
join
(
''
)
return
crypto
.
createHash
(
'
sha1
'
).
update
(
str
).
digest
(
"
hex
"
)
}
function
PKCS7Decode
(
buf
)
{
let
padSize
=
buf
[
buf
.
length
-
1
]
return
buf
.
slice
(
0
,
buf
.
length
-
padSize
)
}
function
decryptMsg
(
encodingAESKey
,
msgEncrypt
)
{
const
key
=
Buffer
.
from
(
encodingAESKey
+
'
=
'
,
'
base64
'
)
const
iv
=
key
.
slice
(
0
,
16
)
const
decipher
=
crypto
.
createDecipheriv
(
'
aes-256-cbc
'
,
key
,
iv
)
decipher
.
setAutoPadding
(
false
)
let
deciphered
=
Buffer
.
concat
([
decipher
.
update
(
msgEncrypt
,
'
base64
'
),
decipher
.
final
()])
deciphered
=
PKCS7Decode
(
deciphered
)
const
content
=
deciphered
.
slice
(
16
)
const
length
=
content
.
slice
(
0
,
4
).
readUInt32BE
(
0
)
return
{
message
:
JSON
.
parse
(
content
.
slice
(
4
,
length
+
4
).
toString
()),
appId
:
content
.
slice
(
length
+
4
).
toString
()
}
}
module
.
exports
=
function
(
event
,
context
)
{
const
{
msg_signature
:
msgSignature
}
=
event
.
queryStringParameters
const
body
=
JSON
.
parse
(
event
.
body
)
let
result
=
body
// 消息解密
if
(
body
.
Encrypt
)
{
const
signature
=
getSignature
(
'
your token
'
,
'
1666095834
'
,
'
43829373
'
,
body
.
Encrypt
)
if
(
signature
!==
msgSignature
)
{
return
'
signature error
'
}
const
decrypt
=
decryptMsg
(
'
your encodingAESKey
'
,
body
.
Encrypt
)
result
=
decrypt
.
message
}
// 只接收内容安全事件通知
if
(
result
.
Event
!==
'
wxa_media_check
'
)
{
return
'
success
'
}
if
(
result
.
result
.
suggest
!==
'
pass
'
)
{
// 执行删除操作
}
}
```
## 1.x升级2.x指南
由于依赖了
`uni-open-bridge`
,2.0版本不会向下兼容,请按照以下步骤升级:
步骤一:在
`uni-config-center`
中创建配置文件
为了升级到
`uni-sec-check`
的V2版本,您需要在
`uni-config-center`
中创建
`uni-id`
目录,并创建
`config.json`
配置文件。如果该文件已经存在,请忽略此步骤。
配置文件的路径为
`uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json`
。
步骤二:更新内容安全检测模块代码
创建内容安全检测模块实例
`UniSecCheck`
增加必传参数
`requestId`
,示例如下
旧
```
js
const
uniSecCheck
=
new
UniSecCheck
({
// 创建内容安全检测模块实例
provider
:
'
mp-weixin
'
,
// 指定所使用服务的提供商,目前仅支持mp-weixin
// customGetAccessToken: async function() { // 自定义的获取accessToken方法,见下方关于customGetAccessToken的说明
// return {
// accessToken: '',
// expired: 1624537278552
// }
// },
// onlyUseCachedAccessToken, // 仅使用缓存在数据库的accessToken,用于在uniCloud内使用其他服务获取accessToken,且缓存在了云数据库的场景,默认false
// refreshAccessTokenThreshold, // token有效期剩余少于多少毫秒时开始刷新,默认300000毫秒
// abandonAccessTokenThreshold // token有效期剩余少于多少毫秒时舍弃不用,默认5000毫秒
}
})
```
新
```
js
const
uniSecCheck
=
new
UniSecCheck
({
// 创建内容安全检测模块实例
provider
:
'
mp-weixin
'
,
// 指定所使用服务的提供商,目前仅支持mp-weixin
requestId
:
this
.
getUniCloudRequestId
(),
// 云函数内则写 context.requestId 云对象内则写 this.getUniCloudRequestId()
})
```
## 错误码说明
|错误码 |说明 |
|-- |-- |
|uni-sec-check-system-error |系统错误 |
|uni-sec-check-risk-content |存在风险内容 |
|uni-sec-check-invalid-appid |appid不正确 |
|uni-sec-check-invalid-appsecret |appsecret不正确 |
|uni-sec-check-invalid-access-token |accessToken不正确 |
|uni-sec-check-access-token-expired |accessToken已过期 |
|uni-sec-check-invalid-file-type |错误的文件类型 |
|uni-sec-check-invalid-image-size |图片大小超出限制 |
|uni-sec-check-invalid-request-url |错误的请求地址 |
|uni-sec-check-invalid-request-param |错误的请求参数 |
|uni-sec-check-invalid-request-format |错误的请求格式 |
|uni-sec-check-param-required |缺少必要参数 |
|uni-sec-check-empty-image |图片文件内容为空 |
|uni-sec-check-empty-content |文字内容为空 |
|uni-sec-check-invoke-out-of-limit |接口调用频率/次数超出限制|
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录