跨站脚本攻击<CSRF>

一、前言
跨站脚本攻击<即CSRF:Cross Site Response Fork>,主要是指在恶意网站、电子邮件、即使消息、应用以及其它,使用户的Web浏览器执行其它Site的一些操作,
并且用户已经授权或登录了该站点时发生。通常在用户不知道操作已经执行的情况下发生

CSRF攻击的影响取决于收到操作的站点。For Example:
-1.Bob登录它的银行账户,执行了一些操作,但是没有登出
-2.Bob检查了他的邮箱,并点击了一个陌生的链接。
-3.陌生站点向Bob银行站点发送请求来进行转账,并传递第一步中,保存Bob银行会话的Cookie信息。
-4.Bob的银行站点收到了来自陌生(恶意)站点的请求,没有使用CSRF Token的情况下处理了转账。

二、原理介绍
恶意网站的链接可以包含有效的HTML<imagsrc="www.malicious_site.com">,并且不需要Bob点击链接,如果Bob的设备(略如浏览器)渲染了这个图片,
它会向malicious_site.com发送请求,来完成CSRF攻击。
那怎么来预防呢?最流行的方式大概是CSRF Token,它必须伴随这潜在的数据修改(列如POST请求)。这里,Web应用(列如Bob的银行)会生成一个两部分的Token,一个Bob会收到,另一个应用保管。当Bob试图提交转账请求时,它就需要提交Token,银行会验证这一边的Token。这种保护叫做CORS,本质上CORS限制了资源,包括JSON响应,被外域访问。

三、补充
并不是每个带有CSRF Token的请求都带有CSRF问题。一些站点可能执行额外的检查,列如比较Referer协议头(虽然可能出错,并且有一些绕过它的案例)。它是一个字段,标识了链接到被请求资源的页面地址。换句话说,如果POST调用Referer并不来源于收到HTTP请求的相同站点,站点可能不允许该调用,因此能完成CSRF Token的相同操作。
此外,不是每个站点在创建或者定义Token都使用csrf术语。列如,在Badboo它使用rt参数。

四、示列
Shopify道出已安装的用户
URL :https;//app.shopify.com/services/partners/api_clients/*/export_installed_users 描述*:
Shopify的
API*提供了一个终端,用于导出已安装用户的列表,通过上面给出的URL,在站点能够调用该终端,并且读取信息的地方存在漏洞,因为Shopify在该调用中并没有包含任何CSRF Token验证。下面的HTML代码可以用于代表任何未知受害者提交表单:

1
2
3
4
5
6
7
<html>
<head><title>CSRF</title></head>
<body onload="document.forms[0].submit()">
<form action="https://app.shopify.com/services/partners/api_clients/1105664/\export_installed_users" method="GET">
</form>
</body>
</html>

这里,仅仅通过浏览站点,JavaScript就会提交表单,它实际上包含Shopify API的GET请求,使用受害者的浏览器,并提供Shopify的Cookie。

五、重要结论

扩展自己的攻击领域,并从站点转向它的API终端。API提供了极大的漏洞可能性,所以最好牢记他,尤其是当你知道API可能开发完毕,或者在站点实际开发之后可用的时候