安全多方计算库调用跨域接口时,如何避免明文数据被浏览器拦截?
我在用前端安全多方计算库SecureMultiPartyComputeLib处理用户数据时,需要将加密后的数据通过POST请求发送到后端服务。但发现当调用compute方法后,发送到https://api.secure-service.com的请求被浏览器拦截,控制台报错“Blocked by CORS policy: No ‘Access-Control-Allow-Origin’”。
尝试在前端设置headers时发现,即使设置了
fetch('https://api.secure-service.com', {
method: 'POST',
headers: {
'Content-Type': 'application/ciphertext',
'X-Requested-With': 'secure-compute'
},
body: JSON.stringify({ encryptedData: computeResult })
})
仍然无法绕过跨域限制,但直接用curl测试接口是成功的。这种情况下应该如何配置才能既保证数据在传输前完成安全多方计算,又能让浏览器允许跨域请求?
解决方法很简单:**必须在服务端配置CORS头**,而不是在前端折腾。具体来说,你的后端需要返回以下响应头:
注意几点:
1.
Access-Control-Allow-Origin要设置成前端的实际域名,不能直接用通配符*,否则不安全。2.
Access-Control-Allow-Methods必须包含POST和OPTIONS,因为浏览器会先发一个预检请求(OPTIONS)。3.
Access-Control-Allow-Headers要明确列出你自定义的headers。如果后端用的是Node.js + Express,可以这样写:
最后说一句,这种问题别老想着在前端解决,浏览器的跨域规则就是靠服务端配合的,搞清楚责任归属才能少走弯路。