我有一个iOS应用程序,它显示来自后端的图像(亚马逊S3),我想阻止用户在iOS应用程序之外查看图像。
实际上,后端发送一个图像的base64表示,使得很简单,让我们缩短一个图像的base64,让我们假设它的表示是:
vQNBX1vW19ekvrrvi7eCqDH04QmUs1i3u4WpXjX3tQ2gh
如果用户使用代理,他可以轻松拦截http调用并查看生成的json响应,如
{ "img" : "vQNBX1vW19ekvrrvi7eCqDH04QmUs1i3u4WpXjX3tQ2gh"}
有了这些信息,用户可以保存它,并且他将能够在iOS应用程序之外查看它。
这就是为什么我在考虑“隐藏”真实形象的原因。为了简单起见,我将字符串分成两部分,并将它们反转; json文档会变成这样的东西:
{ "img" : {
"part1" : "0HDqCe7ivrrvke91Wv1XBNQv",
"part2" : "hg2Qt3XjXpW4u3i1sUmQ4"
}
}
(当然混淆算法会复杂得多,iOS将负责处理这个并重新构建真实图像)
我的问题是:这真的有效/安全吗?我的感觉得到缓解,因为解密算法将在iOS应用程序中进行硬编码,发现它会很简单吗?
当然,这不会阻止用户拍摄快照,但我对此很好。
答案 0 :(得分:1)
如果@zaph建议使用严格的HTTPS和证书固定,那么用户将无法使用代理或其他网络监控工具来查看传输中的图像。
如果您只允许经过身份验证的客户端下载映像,并使用一些合理的身份验证方法,则可以将能够访问该映像的人员限制为经过身份验证的用户。
如果您使用从用户的身份验证机密或客户端与服务器之间共享的其他秘密派生的某些密钥,加密图像服务器端并在客户端解密,并导出密钥这种推导方式既不明显又难以计算,那么你就会混淆编写脚本的用户来下载图像。
如果您实施了所有这些功能,那么您可能会让事情变得非常困难,以至于您的绝大多数用户都无法或不够谨慎地检索图像。然而,确定的用户仍将通过努力和/或资金的支出来提取图像。最终,他们将能够编写脚本来下载图像并删除您实施的任何加密/模糊处理;那里有攻击者,至少和你一样聪明。你可以期待的最好的事情是让它尽可能耗时,困难和昂贵,这样聪明的攻击者就不会费心去尝试。