系统应用架构的发展,从早期的单体架构,发展到现在基本上都是前后端分离的架构(很大程度上是因为移动互联网的飞速发展)。开发模式上,也从早期的程序员前后台都需要写,演
系统应用架构的发展,从早期的单体架构,发展到现在基本上都是前后端分离的架构(很大程度上是因为移动互联网的飞速发展)。开发模式上,也从早期的程序员前后台都需要写,演化成现在分为前端开发工程师和后端开发工程师。具体如下图所示:
前后端分离之后,就会面临着很多问题,之前传统的session认证方式,对移动端的支持有限,尤其是安全层面的问题。传统用session进行登录流程如下:
而用session做认证,容易遭受CSRF的攻击,如下图最经典的银行转账案例:
而CSRF有两个经典的解决方案:
其一、验证HTTP Referer 字段
根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。
这种方法的显而易见的好处就是简单易行,只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。
但是不安全, Referer有的浏览器也可以篡改,比如IE6。
其二、HTTP头部中添加Token,具体Token的验证流程如下所示:
最后说一下CSRF的实现方式主要有下面三种:
1、Nginx等中间件中配置。
2、程序中借助于框架,比如SpringSecurity。
3、自定义代码验证拦截(网关层)。