网站开发跨域名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域名就能伪装成用户请求银行转账了。