【发布时间】:2016-06-09 12:18:08
【问题描述】:
我正在开发一个本地应用程序,它显示来自安全本地服务器的敏感图像,我需要确保这些图像只能在我的 Web 应用程序中查看 - 所以我不希望它们存储在磁盘上(通过缓存或类似的东西那个)。
这是我的响应标头(nodejs express):
res.header("Cache-Control", "no-cache, no-store, must-revalidate");
res.header("Pragma", "no-cache");
res.header("Expires", "0");
res.send(image);
这是我获取图像并渲染它的 AngularJS 代码。我使用 AJAX 是因为我通过 JWT 对用户进行身份验证,所以我需要包含 auth 标头。
$http.get(src, {
responseType: 'arraybuffer'
})
.then(function(res){
var headers = res.headers();
var blob = new Blob([res.data], {
type: headers['content-type']
});
image.src = $window.URL.createObjectURL(blob);
});
它似乎有效,但我对 Chrome 和 Firefox 开发人员工具向我展示的内容感到困惑。我需要 100% 确定这些图像没有存储在磁盘上。
但我明白了:
Status Code: 200 OK (from cache)
我在 chrome://cache 选项卡中看不到图像,但我担心我在网络监视器中看到(来自缓存)。
在我的 Firefox 缓存查看器中,我看到了图像的 url,但设备列显示“内存”。任何正在查看内存的人都可以在一段时间后查看它,尤其是在用户注销之后?
所以我想我真正的问题是当我创建一个 blob 时这两个浏览器在做什么?任何人都可以在浏览器之外访问这些图像吗?它在移动/平板设备上做什么?
如果我使用 base64 字符串传输图像,在隐私和安全方面会更安全还是更差?
【问题讨论】:
-
除了缓存...你知道如果他们真的想要用户可以简单地将图像保存到磁盘?
-
用户可以对文档进行截图。
-
“如果我使用 base64 字符串传输图像,在隐私和安全方面会更安全还是更差?” – 完全一样.
-
缓存会发生什么,如果在图像加载后你会做 $window.URL.revokeObjectURL(image.src) ?它会从缓存中消失吗?
-
@deceze 确实如此,但用户已经被授权查看图像,因此如果他们将其保存到磁盘/截屏,这是他们的责任。我只是想知道应用程序是否在设备上留下了图像的痕迹。
标签: javascript google-chrome firefox caching browser