# CSRF
## CSRF是什么?
英文全名是 cross-site request forgery,中文全称是跨站请求伪造。
## CSRF可以干什么?
攻击者以受害者的名义请求网站。
## CSRF的原理
![](https://box.kancloud.cn/02f816e42d067ae5f5e199938d47f5a9_968x545.png)
从上图可以发现,完成一次CSRF攻击至少要满足两点
1. 受害者登陆了安全网站A
2. 未退出A的情况下访问危险网站B
### 示例1
* 银行网站A,通过GET请求来完成转账操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000
* 危险网站B,有一段HTML代码如下:
```
<img src="http://www.mybank.com/Transfer.php?toBankId=11&money=1000">
```
首先你登陆了银行网站A,然后访问危险网站B,然后你会发现自己的银行账户上少了1000元。
原因如下,首先银行网站A违反了HTTP规范,使用GET请求更新数据。
### 示例2
为了解决示例1的问题,银行网站改用POST转账。
同时,危险网站B也进行了改版,通过隐藏的 iframe 提交POST请求。
用户未退出银行网站A的情况下访问危险网站B还是丢失了1000.
### 小结
```
示例1攻击成本低,只需要通过<img> 标签发起get请求,通过在后端添加请求限制,修改数据支持post来解决。
示例2通过js发起post请求,在提交数据时新增字段token(一次性使用),后端接受数据时验证token。
```
## CSRF的防御
每次刷新页面生成随机token并下发到前端页面,后端接受表单时验证token。
*****
# XSS
## XSS是什么?
英文全称是 Cross Site Scripting,中文名称是跨站脚本攻击。
## XSS可以干什么?
用户输入的内容被直接展示在页面上,内容中包含脚本时会被浏览器执行。