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,永远不要信任用户的输入,需要做适当的转义编码存储以及输出。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。