Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[网络] 10. 什么是 CSRF, 怎么造成的,有什么防御方法? #947

Open
qiilee opened this issue Feb 24, 2020 · 0 comments
Open

Comments

@qiilee
Copy link
Member

qiilee commented Feb 24, 2020

答案:

CSRF 概念:CSRF 跨站点请求伪造(Cross—Site Request Forgery),跟 XSS 攻击一样,存在巨大的危害性,你可以这样来理解:
攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中 Web A 为存在 CSRF 漏洞的网站,Web B 为攻击者构建的恶意网站,User C 为 Web A 网站的合法用户。

CSRF 攻击攻击原理及过程如下:

   1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

   2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

   3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

   4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;


   5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

防御 CSRF 攻击:

   目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。

解析:

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者 Session Riding,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与 XSS 非常不同,XSS 利用站点内的信任用户,而 CSRF 则通过伪装来自受信任用户的请求来利用受信任的网站。与 XSS 攻击相比,CSRF 攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比 XSS 更具危险性。

特点

  • 依靠用户标识危害网站
  • 利用网站对用户标识的信任
  • 欺骗用户的浏览器发送 HTTP 请求给目标站点
  • 另外可以通过 IMG 标签会触发一个 GET 请求,可以利用它来实现 CSRF 攻击。

防御

  • 通过 referer、token 或者验证码来检测用户提交。
  • 尽量不要在页面的链接中暴露用户隐私信息。
  • 对于用户修改删除等操作最好都使用 post 操作 。
  • 避免全站通用的 cookie,严格设置 cookie 的域。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant