CSRF-Cross-Site Request Forgery,跨站请求伪造

典型场景

用户登录了A网站,A网站通过写入cookie识别用户身份信息,在未退出A网站的情况下,用户打开了不受信任的B网站,B网站通过浏览器向A网站发送了执行敏感操作的请求,并且带上了cookie,A网站服务端看到cookie信任了该请求,从而导致用户在不知情的情况下执行了敏感操作。

解法

  • 在向A网站发起请求时(如表单请求)附带一个服务端授予的CSRF Token,这个token可由服务端验证是否有效;
    这个方法实现较为复杂,需要给每一个页面都写入Token(前端无法使用纯静态页面),每一个Form及Ajax请求都携带这个Token,后端对每一个接口都进行校验,并保证页面Token及请求Token一致。这就使得这个防护策略不能在通用的拦截上统一拦截处理,而需要每一个页面和接口都添加对应的输出和校验。这种方法工作量巨大,且有可能遗漏。
  • 双重Cookie
  • 同源检测(Origin 和 Referer 验证)
  • 关键、敏感操作需要二次输入验证码或者密码

XSS-Cross-Site Script,跨站脚本攻击

典型场景

  • 反射型
    攻击者构造了URL,这个URL是用户平常信任的站点,但是带有攻击脚本,一旦用户访问了该URL就会触发攻击脚本的执行,例如窃取用户的cookie用于身份认证或者跳转到恶意网站。
  • 持久型
    攻击者在博客网站编写博客,插入一张图片,并将图片src设置为某一段攻击脚本,提交到博客网站服务器后存入数据库或者其他持久化存储中,其他用户访问该网页并点击这个图片,就会执行这段攻击脚本,例如窃取用户的cookie用于身份认证或者跳转到恶意网站。

    解法

  • 开启HTTP-Only,禁止javascript操作cookie
  • 应对存储型XSS,永远不要信任用户的输入,需要做适当的转义编码存储以及输出。

whoami
0 声望0 粉丝