网页水印可以帮助您保护企业网页的版权,防止网站信息泄露等。在使用网页水印时,您需要将SASE提供的网页水印SDK嵌入到业务服务器上,在发生信息泄露时,可以通过泄露的网页图片提取水印信息,溯源定位泄露人员。本文介绍如何使用网页水印功能。
工作原理
当前支持在网页上嵌入明水印和暗水印,大部分的信息泄露或版权纠纷等在溯源场景主要是依赖暗水印场景。
如果嵌入的是明水印,您可以直接在网页上看到明水印信息。
如果嵌入的是暗水印,您不能直接看到暗水印信息,需要在SASE控制台提取暗水印信息。
暗水印工作原理如下:
前提条件
已购买网页水印服务。具体信息,请参见数字水印计费概述。
配置流程
网页集成明暗水印
操作准备
已存在一台基于X86架构的Linux服务器。该服务器用于部署网页水印SDK。
本文以Ubuntu 24.04 64位的服务器为例。
步骤一:下载网页水印SDK
登录办公安全平台控制台。
在左侧导航栏,选择
。在嵌入服务页面,单击网页水印操作列下载SDK。
将网页水印压缩包下载到本地。当前只支持Java语言。
下载的SDK压缩包中包含如下内容:
watermark-puretransparent-v1.0.9.jar:集成水印的SDK包,需要添加到Maven仓库。
pureTransparentDemo:水印的Demo,您可以通过Demo进行体验。
单击AK/SK信息列的图标,复制AK和SK信息并保存到本地。
步骤二:集成SDK
透明图水印生成SDK,可以根据用户输入参数,生成暗水印或透明水印图片。
添加jar包依赖(maven)。
mvn install:install-file -Dfile=watermark-puretransparent-v1.0.9.jar -DgroupId=com.aliyun.security.sase -DartifactId=watermark-puretransparent -Dversion=v1.0.9 -Dpackaging=jar
<dependency> <groupId>com.aliyun.security.sase</groupId> <artifactId>watermark-puretransparent</artifactId> <version>v1.0.9</version> <scope>compile</scope> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.13.0</version> </dependency>
接口调用生成水印图片。
初始化AK、SK。
/** * 初始化 ak sk * @param appKey 应用密钥Key * @param secret 应用密钥Secret * @param useLocalConfig 是否使用本地配置 0:远程配置(需要联网) 1:本地配置 */ WaterMarkPNGUtils.init(appKey, secret,useLocalConfig);
生成水印图片
方式一:生成水印图片并输出到文件。
ParamsFile paramsFile = new ParamsFile(); //水印,10进制字符串,如“10012”,大小限制根据配置管控,无配置情况为1至4294967295 paramsFile.setWatermarkbitsStr(watermarkbitsStr); //宽度 paramsFile.setWidth(width); //高度 paramsFile.setHeight(height); //透明度,取值范围为 [1, 255]。对于服务化场景建议统一设为 255,而后在渲染时控制透明图,从而降低服务端压力。 paramsFile.setAlpha(alpha); //网页水印和app水印设为0,屏幕水印设为1 paramsFile.setH_idx(h_idx); //缩放 paramsFile.setScale(scale); //目标文件路径 paramsFile.setDestFilePath(dest); /** * 生成水印文件 * @param baseParam * @return * @throws PureTransparentException errorCode 异常码 errorMessage 异常信息 参考《错误码》 */ WaterMarkPNGUtils.waterMarkPngFile(paramsFile);
方式二:生成水印图片到字节数组。
//水印,10进制字符串,如“10012”,大小限制根据配置管控,无配置情况为1至4294967295 paramsBytes.setWatermarkbitsStr(watermarkbitsStr); //宽度 paramsBytes.setWidth(width); //高度 paramsBytes.setHeight(height); //透明度,取值范围为 [1, 255]。对于服务化场景建议统一设为 255,而后在渲染时控制透明图,从而降低服务端压力。 paramsBytes.setAlpha(alpha); //网页水印和app水印设为0,屏幕水印设为1 paramsBytes.setH_idx(h_idx); //缩放 paramsBytes.setScale(scale); /** * 生成水印文件 * @param baseParam * @return * @throws PureTransparentException errorCode 异常码 errorMessage 异常信息 参考《错误码》 */ byte[] destFileBytes = WaterMarkPNGUtils.waterMarkPngFile(paramsBytes); System.out.println("destFileBytes len "+destFileBytes.length); //水印,10进制字符串,如“10012”,大小限制根据配置管控,无配置情况为1至4294967295 paramsFile.setWatermarkbitsStr(watermarkbitsStr); //宽度 paramsFile.setWidth(width); //高度 paramsFile.setHeight(height); //透明度,取值范围为 [1, 255]。对于服务化场景建议统一设为 255,而后在渲染时控制透明图,从而降低服务端压力。 paramsFile.setAlpha(alpha); //网页水印和app水印设为0,屏幕水印设为1 paramsFile.setH_idx(h_idx); //缩放 paramsFile.setScale(scale); //目标文件路径 paramsFile.setDestFilePath(dest); /** * 生成水印文件 * @param baseParam * @return * @throws PureTransparentException errorCode 异常码 errorMessage 异常信息 参考《错误码》 */ WaterMarkPNGUtils.waterMarkPngFile(paramsFile);
步骤三:将透明水印底图嵌入到自研的网站
在HTML文件
<head></head>
引入水印文件(vm.min.js)。<script src="https://g.alicdn.com/csfe/yd-watermark-loader/1.1.4/wm.min.js"></script>
在HTML文件
<body></body>
末尾添加以下代码。添加完成后,HTML文件会添加您设置的明水印和暗水印。使用浏览器打开HTML文件,会显示明水印信息和不可见的暗水印信息。
<script> // 调用下面的方法时会渲染明水印 window.YD_WATERMARK.render({ horizontalSpace: 300, // 明水印文案之间的水平间隔,单位为像素 verticalSpace: 300, // 明水印文案之间的垂直间隔,单位为像素 opacity: 1, // 明水印文案透明度, 取值范围[0, 1] rotateDegree: 30, // 旋转角度,取值范围[-180, 180] fontColor: "#ff0000", // RGB 格式的文案颜色 rows: ["<账号名称>", "<邮箱>"], // 多行明水印文案 }) // 调用下面的方法时会渲染暗水印 window.YD_WATERMARK.renderInvisible({ imgSrc: "透明水印底图的URL", //您需要将获取到的透明水印底图上传到公网上,获取到对应的URL opacity: 8 // 暗水印透明度 取值范围[1-255],建议值8-10 }) </script>
水印功能函数错误码
错误码 | 描述 |
null_parameters | 存在为空的参数 |
wrong_parameters | embed错误参数 |
jvm_error | embed Java虚拟机错误 |
jni_exception | JNI初始化出错(Office03版水印特有的错误),需检查POI引用是否冲突/出错、JDK版本、系统环境 |
wrong_fileFormat | 文件格式错误 |
imgDecodeError | 图片解码错误 |
imgSizeError | 图片大小错误 |
embedException | 嵌入过程出现异常 |
embedExceptionUnKnow | 嵌入未知错误 |
invalid_carrier | 不合法的载体或参数有误 |
embed_success | 嵌入成功 |
extract_success | 提取成功 |
extract_fail | 提取失败 |
extract_id_exceed | 提取 |
extract_exception | 提取异常 |
ossp_error_code_success | SDK功能执行正常 |
ossp_error_code_invalid_param | SDK加载使用了无效参数 |
ossp_error_code_fail_to_download_config | SDK下载配置失败 |
ossp_error_code_fail_to_read_config | SDK读取配置失败 |
ossp_error_code_invalid_config | SDK无效配置 |
ossp_error_code_unauthorized_device | 未授权设备 |
ossp_error_code_liscence_expired | 许可证过期 |
ossp_error_code_config_mismatch | SDK配置不匹配 |
ossp_error_code_unauthorized_api | SDK功能接口未授权 |
ossp_error_code_invalid_session_id | SDK无效sessionId |
ossp_error_code_api_not_implemented | SDK调用接口未实现 |
ossp_error_code_unknown | SDK未知错误 |
提取暗水印信息
已获取嵌入暗水印信息的外泄网站图片。
步骤一:创建提取任务前提条件
登录办公安全平台控制台。
在左侧导航栏,选择
。单击创建提取任务,在创建提取服务面板,参考如下说明配置提取文件。
配置项
说明
水印版本
根据购买的水印版本选择。
水印类型
选择网页水印。
嵌入水印信息位宽
设置水印信息的位宽,位宽需要与透明水印底图的SDK位宽(默认为32位)保持一致。
上传待提取水印文件
根据界面提示,上传获取到的泄露文件。
单击确定。
创建成功后,提取服务页面会显示创建的任务信息。
步骤二:查看提取结果
登录办公安全平台控制台。
在左侧导航栏,选择
。单击创建提取任务,在创建提取服务面板,参考如下说明配置提取文件。
配置项
说明
水印版本
根据购买的水印版本选择。
水印类型
选择网页水印。
嵌入水印信息位宽
设置水印信息的位宽,位宽需要与透明水印底图的SDK位宽(默认为32位)保持一致。
上传待提取水印文件
根据界面提示,上传获取到的泄露文件。
单击确定。
创建成功后,会在提取服务页面显示创建的任务信息。
溯源定位泄露人员
在提取服务页面,单击提取信息列展示。
在展开的信息中,您可以提取到暗水印原文(十进制数字)。
例如,您是123456,映射表中123456对应的是张三,则定位出泄露人员是员工张三,溯源定位泄露人员。