代码安全- CSRF(Cross-Site Request Forgery)跨站请求伪造攻击

CSRF(Cross-Site Request Forgery)跨站请求伪造攻击

劫持被攻击者浏览器发送http请求到目标网站触发某种操作的漏洞。
csrf最终作用对象时服务器上的web程序,是远端的。CSRF是因为过分信任用户,放任来自通过身份验证的所谓合法用户的请求执行网站的某个特定功能而进行的攻击。而xss的最终作用对象是浏览器,是本地的,XSS是由于放任来自浏览器的输入任意执行导致了。

CSRF攻击攻击原理及过程如下:
  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
    2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  2. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  3. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
  4. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
站内发起攻击:

利用网站本身的业务,比如“自定义头像”功能,恶意用户指定自己的头像URL是一个可以修改用户信息的链接,当其他一登陆用户浏览恶意用户头像时,会自动向这个链接发送修改信息请求。站内CSRF攻击通常结合XSS一起使用。

示例:

恶意攻击者在某论坛留言板中输入:

当系统管理员登录系统并查看留言时,就会在管理员完全没有察觉的情况下,执行了恶意攻击者的JS语句去创建用户名和密码都为hacker的用户。这样恶意攻击者就通过伪造请求的方式创建了hacker这个用户。

站外发起攻击:

从站外发送请求,则需要恶意用户在自己的服务器上,放一个自动提交修改个人信息的htm页面,并把页面地址发给受害者用户,受害者用户打开时,会发起一个请求。如果恶意用户能够知道网站管理后台某项功能的URL,就可以直接攻击管理员,强迫管理员执行恶意用户定义的操作。

站外攻击实例如下:

(1)在页面中加入一个标签,浏览器就会发送一个请求,以获取其src属性引用的值
(2)攻击者将敏感操作的URI作为src
(3)继承Cookie,以浏览者的身份作敏感访问并操作
(4)危害:在用户无意识情况下进行危险操作

示例1:

攻击者为了攻击某站点的登录用户,可以构造2个HTML页面。
首先在页面a.htm中写一个没有面积的iframe,以免受害者看到提交结果而产生警觉.