本文介绍Google高版本cookie samesite策略相关问题
为了保证私有化部署下,可以在各种环境中不增加配置的情况下运行。默认情况下毕升Office部署,不会开启额外的安全配置选项。如果你的系统在对文档集成方面有更高的安全要求,可以按照文档中如下几个方面来提升你的系统安全级别
毕升Office提供两种集成方法:1. 前端参数集成;2. 服务器传递参数集成。这两种方式具体参考:
默认情况下,预览/编辑文件的请求参数除必要的参数外(前端为参数data,服务端为参数callUrl)可以不包含安全验证参数。为了避免在一些较为场景下,由其他第三方自行拼接参数调用office预览/编辑服务。可以要求请求参数中必须保护签名参数。签名参数的值为data或callUrl值的与毕升Office api key的hmac-md5 计算值。
对于客户端参数集成,开启参数签名之后的请求地址格式如下:
服务端传递参数的请求地址格式如下:
在毕升office配置文件(默认路径:/bisheng_data/workspace/config/config.yml)中的security下增加urlsign,基本格式如下:
security:
urlsign: true #默认为false
其中security为配置文件根配置项,如果配置文件中没有,可以在配置文件中直接添加。
API key是毕升Office激活之后控制台(/apps/console)中的值,具体如下:
参数签名计算方法为:将data(客户端集成)或者callUrl(服务端传递参数集成)参数作为hmac-md5计算加密数据,api key作为密钥计算而得。
例如:45ae1f8b5d50ea9322a3d8e3326ca0f9是api key, 我们以nodejs 为例对字符串 bishengoffice.com进行签名:
var crypto = require('crypto');
var hmac = crypto.createHmac('md5', '45ae1f8b5d50ea9322a3d8e3326ca0f9'); //第二个参数为api key
data = hmac.update('bishengoffice.com');
gen_hmac= data.digest('hex');
console.log("hmac : " + gen_hmac);
==========================输出为:
hmac : a3bcad4f42b7b41edbf7f737bd4d8254 //签名结果
在实际的开发中,需要根据具体开发语言实现相应HMAC-MD5 ,并且可以使用上面例子中的数据来验证实现是否有问题。
需要注意的是:启用了签名配置之后,如果调用过程中没有传递签名参数,或者签名结果不正确,将导致调用过程失败。错误代码:
{"code": "check data sign error"}
在开启了API安全选项之后, rest API调用时需要加上相应的签名选项
同时需要注意:如果开启了签名验证,则需要在 http 请求head里面如下添加两个值:1. time , 值为你发起请求是的时间,时间格式必须为ISO 8601格式;2. 使用 apikey对上面time的值进行HMAC-MD5签名的签名值。如下图
前端参数集成方案较为简单,可以用于较为简单,并且安全要求不高的应用场景。该方案中,文档信息以及用户参数在进行相应的处理之后以base64编码的方式直接发送到客户端。此时data中的参数进行base64解码可以得到文档的相关数据。
因此可以根据实际需要采用服务端传递参数的方式。该方式是通过向毕升Office传递一个业务系统的服务地址,由毕升Office的服务器向该地址请求数据,该地址返为一个post请求,由业务系统返回本次预览/编辑文档是的参数数据。具体参考:服务端获取参数集成
采用服务端传递数据时,通常可以对传递的业务系统的服务地址做一些处理已实现更高的安全性要求,通常可选的方式由:
- 限制callUrl的地址只能由毕升Office所在的服务器IP发起,可以限制只有毕升Office服务器能拿到本次编辑的数据
- 限制callUrl的有效时间(例如业务系统在生成地址参数时带上时间戳参数)来限制该地址只能在一定时间内有效,避免地址被拷贝之后反复使用
- 限制callUrl的有效次数(例如业务系统限制该地址被请求一次之后即标注为无效)来限制该地址只被真实使用一次。
默认情况下毕升Office最终在浏览器中的编辑地址将带上会话ID,这样做的目的是避免在iframe集成中,由于毕升Office所在的域和业务系统的域不一致时,在浏览器的高级版版本中导致cookie无法写入。具体参考认证配置
在这种情况下,用户拷贝编辑/预览地址到其他浏览器中可以直接预览/编辑文件。的这种默认行为可以用于低安全级别的环境中。
如果使用环境安全要求不能接受这种行为,可以参考链接中说明进行处理:认证配置