这是一个创建于 1888 天前的主题,其中的信息可能已经有所发展或是发生改变。
小白最近在学习登录系统的网络安全知识,一个摆在眼前的问题就是,倒是是用有状态登录验证还是无状态登录验证。如果使用无状态的话,好处是业务节点可以随意扩展,听起来似乎是银弹。但弊端也很明显,就是应对各种攻击还没有比较成熟的方案,比如 XSS 和 CSRF 。
根据我这两天搜索到的知识,登录凭证一般有两种储存的地方,一种是 cookie,一种是 sessionStorage 等,前者可以通过设置禁止 js 访问,相当于完全禁绝 xss 攻击,但同时却无法防范 csrf 攻击,而后者则有被 xss 读取的风险。
那么意味着,一种合理的处理方案是,使用 cookies 储存凭证,同时进行 csrf 防御。然而搜索了一下 csrf 防御方法,除了基本的验证 Referer 以外,似乎比较主流的方法就是在 post 方法中添加自定义参数,让恶意用户无法构造出一个合法请求,也就防范 csrf 了。
然而我看这些文章的时候想说,即使用 csrf token 的方式,与 JWT 相同的,它仍需要将凭证储存在前端中,那就意味着如果网站出现 xss 漏洞,它还是会被攻破。所以理论上无论禁不禁止 js 访问 cookies,网页都会面临 xss 漏洞的威胁,那么似乎只要保证开发安全,就必须以无 xss 漏洞为前提,似乎 csrf 是一个完全没必要的讨论了?
有没有网安大佬讲一下我理解的对不对。另外关于 xss,是不是现在用前端开发框架基本不用考虑 xss 的问题,比如 vue,只要我不使用 v-html,应该是免疫的吧?