# CSRF
## CSRF是什么?
英文全名是 cross-site request forgery,中文全稱是跨站請求偽造。
## CSRF可以干什么?
攻擊者以受害者的名義請求網站。
## CSRF的原理

從上圖可以發現,完成一次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可以干什么?
用戶輸入的內容被直接展示在頁面上,內容中包含腳本時會被瀏覽器執行。