我正在编写一个应用程序,其中大部分状态存储在客户端。状态有点私人信息,所以我想将其保留在客户端。有一些严格的政策禁止这些信息到达我的服务器。到目前为止,我使用了localStorage
,这是一个完美的解决方案。
不幸的是,事实证明,Safari在localStorages和iframe(1,2,3)方面存在一些问题。如果我使用cookie,浏览器会将它们发送到服务器,这是不可接受的。使用javascript管理所有存储的数据,不使用http Set-Cookie标头。
基本用例如下:应用程序在域A中有一个“主”页面,用户可以在其上更改其设置,并且在另一个域(B)中有一个页面,其中有一个iframe指向域A中的一些特殊页面,并使用postMessage和onmessage来交换一些信息。域A的主页面和域B中嵌入的iframe必须共享一些存储才能运行。
对此有何看法?
编辑1
以下是一个想法:在iframe和“master”页面上询问用户密码,并使用该密码加密私人信息。加密的私人信息可以存储在cookie中,因为我的服务器没有用户密码。这是迄今为止最好的解决方案,但对用户来说是不舒服的。
答案 0 :(得分:2)
根据this post您可以使用
window.parent.postMessage("Hello From IFrame", "*");
与父框架中的事件侦听器结合使用
window.addEventListener ("message", OnMessage, false);
从子框架到父框架的跨域通信。
然后,您可以使用父框架中的本地存储来保存您的共享信息。
答案 1 :(得分:0)
如果本地存储无法正常运行,则可以使用会话存储,因为会话存储未发送到服务器。
但使用会话存储的限制是您无法在同一个域中的选项卡之间共享数据,在单个选项卡中它可以正常工作。
答案 2 :(得分:0)
不太确定,但也许你正在寻找一个解决方案:
如何使用用户的登录密码加密数据?
或者从服务器生成令牌并在客户端存储。从服务器发送回数据到客户端时,检查令牌并根据令牌加密数据。尝试构建多种类型的令牌,每种类型都有不同类型的加密。
其他解决方案
使用安全cookie + http严格运输。你不需要改变任何东西,只需根据你的后端实现它们。您可以从这里阅读更多内容: https://www.owasp.org/index.php/SecureFlag https://www.owasp.org/index.php/HTTP_Strict_Transport_Security
希望它有所帮助。