文本信息审查

介绍如何调用接口在WebService应用通道中进行针对文本内容的内容审查。

请求方式

POST

接口地址

/skg/v1/dlp/channel/webserviceapp/<WebService应用ID>/<文本请求模式>

请求参数

参数名称 参数位置 是否必须 描述
<WebService应用ID> URL参数 WebService应用程序的ID。
<文本请求模式> URL参数 指定文本内容的请求模式为同步或异步。
  • message_sync
  • message_async

元数据参数

支持文本内容的扫描

metadata参数定义

参数名 类型 适用状态 说明
user String(必选) 同步和异步 生成事件的用户名 - 支持域用户,格式为域名\用户名。
customAttribute String(可选) 同步和异步 支持用户自定义的参数名。
queryID String(必选) 同步和异步 与此请求关联的事件查询ID,保持唯一。若请求无事件生成则无法查询到事件详情。
注: queryid的值对应于第三方云服务中的流量UUID。
redaction Dict(可选) 同步和异步 脱敏功能相关。是否开启脱敏功能。具体的脱敏设置,请查阅sendBack参数。
 "redaction": {
        "enable": true # 当enable的值为true时,脱敏请求才生效
  }
sendBack Dict(可选) 同步和异步 脱敏功能相关。脱敏后内容的处理。
注: 如需使用脱敏功能,请将redaction参数值设置为true。

该字段要求输入一个必选的type属性,表示返回文件的方式,Type属性支持以下选项:

response:将脱敏后的内容返回至当前路径

httpUpload:将脱敏后的内容发送至指定URL

s3:将脱敏后的内容上传至Amazon S3存储空间

注: 此步骤同样适用于存储到SwiftCOSOSS等存储服务。具体相关配置参数,请参考章节异步模式下审查云服务存储内容的objectinfo参数
  • response:将脱敏后的内容返回至当前路径。以下为代码示例:
      "sendBack": {
        "type": "response" # 将脱敏后的内容返回至当前路径
      },
  • httpUpload:将脱敏后的内容发送至指定URL。以下为代码示例:
     "sendBack": {
        "type": "httpUpload",
        "url": "http://172.11.11.6/callback" # 将脱敏后的内容返发送至该url
      },
  • S3:将脱敏后的内容上传至云存储。以下为适用于S3的代码示例:
     "sendBack": {
            "type": "s3",
            "s3Bucket": "test",
            "s3Region": "", # 将脱敏后的文件上传到该位置。此处的值为使用s3时的region name,
    # 如果运行在EC2上并使用AWS IAM role,则以下三项可省略,则以下三项accessKey、secretKey、endpointUrl可省略
            "accessKey": "aws_accessKey",
            "secretKey": "aws_secretKey",
            "endpointUrl": ""
      },
operation int(可选) 同步和异步 操作ID。创建WebService应用时定义,在API流量日志的Webservice操作字段中将会显示操作ID对应的操作名称。默认有以下四种,用户也可以自定义:
  • 1 - 读取
  • 2 - 写入
  • 3 - 添加
  • 4 - 删除
encoding String(可选) 同步和异步 文件编码
uploadtype String(必选) 异步 只限于异步。支持本地文件。
  • file
callback_url String(可选) 异步 只限于异步模式填写回调函数的url

请求示例

以下示例为调用接口分别在同步模式和异步模式下发送文本内容至统一内容安全审查平台UCWI进行内容安全检测。

  • 同步状态下:
    POST /skg/v1/dlp/channel/webserviceapp/appid/message_sync
    Content-Type: multipart/form-data; boundary=${bound}
    --${bound}
    Content-Disposition: form-data; name="metadata"
    Content-Type: application/json
    {
        "user":"abc\enduser1",
        "queryID":"cd2fd109-c4d4-489f-9b27-53752f7827d6",
    }
    --${bound}
    Content-Disposition: form-data; name="inspectContent";
    Content-Type: text/plain
    %Message Content%
  • 异步状态下:
    POST /skg/v1/dlp/channel/webserviceapp/appid/message_async
    Content-Type: multipart/form-data; boundary=${bound}
    --${bound}
    Content-Disposition: form-data; name="metadata"
    Content-Type: application/json
    {
        "user":"abc\enduser1",
        "queryID":"cd2fd109-c4d4-489f-9b27-53752f7827d6",
        "callback_url":"http://172.22.113.49:5000/post/webserviceapp"
    }
    --${bound}
    Content-Disposition: form-data; name="inspectContent";
    Content-Type: text/plain
    %Message Content%

Python请求示例 - WebService通道(同步模式)

以下示例为使用Python代码调用接口,以在异步模式下,上传WebService通道中的文本内容,以供内容安全审查。

注: 在如下Python代码示例中,导入的Header文件ucwi_config ucwi_auth的需事先创建,如需详细参考示例,请参阅Header文件示例
注: 在如下Python代码示例中,app_id为WebService应用ID,如需获取该ID,参照获取WebService应用ID
# -*- coding: utf-8 -*-
from requests.packages.urllib3.exceptions import InsecureRequestWarning
from ucwi_config import UCWIConfig
from ucwi_auth import get_headers
import requests
import json
import uuid

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

app_id = "caafb22a-9f6d-4a06-a0e4-b12c170afdf5"
api = "/skg/v1/dlp/channel/webserviceapp/{}/message_sync".format(app_id)
url = "{0}{1}".format(UCWIConfig.base_url, api)
file_path = "test.txt"

metadata = {
    "user": "ucwitestuser",
    # 发送数据的用户,用于内容安全审查时的策略匹配,以及内容安全审查完成后的事件显示
    "queryID": str(uuid.uuid4()),
    "origin_filename": file_path
}

with open(file_path) as f:
    content = f.read()
    # 需要检查的内容

headers = get_headers()
data = {
    "metadata": json.dumps(metadata),
    "inspectContent": content,
}

response = requests.post(url, headers=headers, data=data, verify=False)

if response.status_code != 200:
    print("Bad request, response code:", response.status_code)
    print(response.text)
else:
    result = response.json()
    if result["responseCode"] != 200:
        print("Bad request, response code:", result["responseCode"])
        print(result["message"])
    else:
        hint = "# 1:允许; 2:阻断;3:确认;4:删除附件;5:邮件加密;6:邮件隔离;7:终端系统加密;8:邮件内容加密;9:终端个人密钥加密"
        print("action:{}    {}".format(result["actionCode"], hint))
        if len(result["incident_info"]) == 0:
            print("not matched.")
        else:
            print("matched policy:")
            for policy in result["incident_info"]["matchedPolicies"]:
                print(json.dumps(policy, indent=2).encode('utf-8').decode('raw_unicode_escape'))

Python请求示例 - WebService通道(异步模式)

以下示例为使用Python代码调用接口,以在异步模式下,上传WebService通道中的文本内容,以供内容安全审查。

注: 在如下Python代码示例中,导入的Header文件ucwi_config ucwi_auth的需事先创建,如需详细参考示例,请参阅Header文件示例
注: 在如下Python代码示例中,app_id为WebService应用ID,如需获取该ID,参照获取WebService应用ID
# -*- coding: utf-8 -*-
from requests.packages.urllib3.exceptions import InsecureRequestWarning
from ucwi_config import UCWIConfig
from ucwi_auth import get_headers
import requests
import json
import os
import uuid

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

app_id = "caafb22a-9f6d-4a06-a0e4-b12c170afdf5"
api = "/skg/v1/dlp/channel/webserviceapp/{}/message_async".format(app_id)
url = "{0}{1}".format(UCWIConfig.base_url, api)
file_path = "test.txt"

metadata = {
    "user": "ucwitestuser",
    # 发送数据的用户,用于内容安全审查时的策略匹配,以及内容安全审查完成后的事件显示
    "origin_filename": file_path,
    # 上传文件的文件名,用于内容安全审查时的策略匹配
    "queryID": str(uuid.uuid4()),
    # 此次请求关联的UUID,需要唯一,在异步模式下,用于事件查询
    #"encoding": "UTF-8",
    # 可选参数,文件的编码方式,默认是UTF-8
    #"antivirus": False,
    # 可选参数,是否执行反病毒检查,默认值为False,即忽略,如需反病毒检查,可改为True
    #"md5": "09e066b382d4225de7f3c0594aa89b5f",
    # 可选参数,默认为空字符串,用于内容安全审查完成后的事件显示
    "uploadtype": "file",
    "callback_url": UCWIConfig.callback_url + "/webserviceapp"
}

# 需要检查的内容
with open(file_path) as f:
    content = f.read()

headers = get_headers()
data = {
    "metadata": json.dumps(metadata),
    "inspectContent": content
}

response = requests.post(url, headers=headers, data=data, verify=False)

if response.status_code != 200:
    print("Bad request, response code:", response.status_code)
    print(response.text)
else:
    result = response.json()
    print(result["message"])

返回参数

内容审查请求返回结果中包含以下参数:

名称 描述
result 请求是否成功,成功为0,失败为1
actionCode 请求成功时,用户可选择对符合请求条件的内容进行默认操作,默认操作包括1-允许数据传输和2-阻断数据传输
errorCode 请求失败时返回的错误代码
message 请求失败时返回的错误消息

返回示例

内容审查请求的回复如下。

  • 请求成功:
    {
    "result" : 0,
    "actionCode" : 1/2
    }
    actionCode: 1 - allow, 2 - block
    注: 若匹配策略,发现违规内容,系统还将返回策略匹配信息,具体请参照送检策略匹配返回值定义
  • 请求失败:
    {
    "result" : 1,
    "errorCode" : 500,
    "message" : "Invalid parameter"
    }

错误代码

若调用出现错误,将返回以下错误代码:
错误码 描述
400 无效参数
404 未知错误,例如请求了未触发的事件等。
500 无效参数