Csrf漏洞主要出现在http cookie被用于传送会话令牌的地方。一旦应用程序已经在用户的浏览器中设定一个cookie,他们的浏览器会自动在随后的每个请求中将这个cookie返回给应用程序。无论请求是源自应用程序提供的一个链接、从其他地方受到的一个url或者其他来源,他都会这样做。如果应用程序并未采取防范措施,防止令牌滥用,那么程序就易于受到csrf攻击。
对于csrf的测试方法。首先,我们可以尝试查找出程序中的增删改功能的操作,可用于代表不知情的用户执行某种敏感操作,找到一项应用程序功能后,使用攻击者能够提前决定的请求参数,也就是说,其中并不包含任何会话令牌或者其他无法预测的数据。然后创建一个html页面,他不需要进行任何用户交互即可提出想要的请求。对于get请求,可以使用一个<img>标签,并通过src参数设置易受攻击的url;对于post请求,可以建立一个表单,其中包含实施攻击所需要的全部相关参数的隐藏字段,并将其目标设为易受攻击的url。可以使用javascript在页面加载时自动提交该表单(document.formname.submit())。
登录应用程序后,使用相同的浏览器加载专门设计的html页面,确认应用程序是否执行想要的操作。
对于csrf的防范,目前有几种方法,比如验证码,密码,token验证等方法都是用的比较广泛的,有时候虽然应用程序中有使用token,但是token却没有生效,我们可以使用httpfox进行拦截,将token修改后,继续提交,看操作是否可以继续正常进行,如果可以,说明token只是表面的假象,并没有生效。此时应用程序就是存在csrf漏洞的。
当然,对于搜索、查询操作,或者不涉及数据库增删改的操作,可以暂时不用担心csrf漏洞。