根据《图解http》一书关于web攻击的介绍,攻击的模式有两大类,主动攻击与被动攻击
主动攻击:
主要针对服务器上的资源进行攻击,代表攻击方式有SQL注入与OS命令注入.
被动攻击:
攻击者并不是直接对web应用发起攻击, 而是通过一定的引诱或者圈套策略发起攻击.
被动攻击中最常见的两种攻击方式是XSS与CSRF:
xss(cross-site-scripting):跨站脚本攻击
跨站脚本攻击的类型分为两种:
反射型: url里面带有攻击代码
存储型: 从后台读取到的内容里含有攻击代码
防御方式: 纯文本:在提交时转义;富文本: 白名单过滤
csrf(Cross-site request forgery):跨站请求伪造
请求伪造的原理,网上有一张比较常见的图片:
原理简而言之就是:
受信任的用户C在A网站登录后没有登出, 产生cookie之后访问了危险网站B,被诱导点击了请求A网站的地址,由于浏览器会自动上传cookie, 所以网站B就达到了模拟用户C进行操作的目的
常见的解决方案分为三种:
1.使用token进行登录验证
token验证是最常用的验证方式,一般情况下由服务端给客户端发送一个用于身份验证的token,客户端再发送请求的时候将token传递回去,如果token验证不通过,那么服务端会拒绝该请求
2.进行refer验证
refer意指来源,验证请求来源的意思是只有本站的请求,服务器才做出响应,不然的话, 就拦截请求.
3.使用隐藏令牌
隐藏令牌的方法本质上与方法一没有太大区别, 只是使用方式不同.
二者之间的区别如下:
区别一:
CSRF:需要用户先登录网站A,获取 cookie。XSS:不需要登录。
区别二:(原理的区别)
CSRF:是利用网站A本身的漏洞,去请求网站A的api。XSS:是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容。