网站开发跨域名iFrame嵌入之SameSite&CSRF

最近使用Flask开发了一个网站的应用,要实现在iframe中嵌入一个来自不同域名的页面。在测试过程中,发现这个页面无法使用Http Get命令获取session中的键值。

经过调查发现了SameSite这个概念。这是谷歌对浏览器cookie增加的一个属性,后来成为了业界的标准。当SameSite等于Lax或Strict时,iframe中的不同域名的页面不会被允许访问session。当SameSite=None时,则无此限制。

所以对于Flask要配置这样一段代码来允许跨域的iframe访问session:

app.config.update(
    SESSION_COOKIE_SECURE=True,
    SESSION_COOKIE_SAMESITE='NONE',
)

参考链接: Security Considerations — Flask Documentation (1.1.x)

对于web.py,则是在setcookie这函数调用时指定SameSite属性。https://webpy.org/cookbook/cookies

这个SameSite的由来,则涉及到一种网络攻击手段叫CSRF。简而言之,就是这种攻击手段利用了iframe或其他一些技术,是A域名的网站能访问B域名的session和cookie,进而甚至于能让A域名的网站利用session和cookie中的信息伪装成用户向B域名发起请求。想象一下A域名是一个银行网站,那么B域名就能伪装成用户请求银行转账了。

参考链接:Cookie的SameSite属性_coder_coan的博客-CSDN博客_samesite

posted @ 2023-01-10 22:18  爱知菜  阅读(172)  评论(0编辑  收藏  举报