跨站请求伪造:攻击者盗用了你的身份,以你的名义发送恶意请求
- cookie生效,第三方网址请求这个a网址。会匹配cookie,会认为验证有效
- 用户在没登出的情况下访问了恶意网站b
cookie生效的情况下,a网站出现一张图片,跳转b网站。img的src指定的地址是接口的请求,用户打开页面后这个img就会自动加载图片也就是发送这个请求。
- 攻击者构造网站后台某个功能的请求地址,诱导用户去点击或者用特殊方法让该请求地址自动加载。
用户在登录状态下这个请求被服务端接收后会被误以为是用户的合法操作。
对于get形式的接口地址可轻易被攻击,对于post形式的接口地址也不是百分百安全,攻击者可以诱导用户进入带Form表单,可用post提交参数的页面
- 只要在页面里面包含请求即可
攻击类型:
1)通过图片的img src属性,自动加载,发起get请求
2)超链接 a href 用户点击发起get请求
3)隐藏表单 自动加载 用户提交 发送post请求
预防:
- 提交验证码,通过在表单中随机生成数字或字母验证码,强制用户与应用进行交互
- referer: 表明请求过来的页面
- token验证。
- 在http请求中以参数的形式添加随机token,并在服务器建立拦截器来验证token,对比失败拒绝请求
- token必须足够随机
- 敏感操作使用post
- 在Http请求中自己定义属性并验证
这样的方法也是使用token并进行验证。这里并非把token以参数的形式置于http请求中,而是要把它放到http头中自己定义的属性里。
攻克了在每个请求体添加token的不便。同时,请求的地址不会计入浏览器地址栏,不用担心token因为referer泄漏到其他站点
与xss区别
- 由第三方网站的角色就是csrf
- 不可以获取明文的cookie
- 不需要注入代码去别人的网站