溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何從代碼角度分析及防護CSRF

發布時間:2021-12-27 17:36:49 來源:億速云 閱讀:175 作者:柒染 欄目:大數據
# 如何從代碼角度分析及防護CSRF

## 什么是CSRF攻擊?

跨站請求偽造(Cross-Site Request Forgery, CSRF)是一種利用用戶已登錄的身份,在用戶不知情的情況下執行非預期操作的攻擊方式。攻擊者誘導用戶訪問惡意頁面,該頁面自動向目標網站發起請求(如轉賬、修改密碼等),由于瀏覽器會自動攜帶用戶的Cookie,服務器會誤認為是合法請求。

## 代碼層面的CSRF攻擊分析

### 典型攻擊流程示例
```html
<!-- 惡意頁面偽造請求 -->
<img src="https://bank.com/transfer?to=attacker&amount=10000" width="0" height="0">

當已登錄銀行網站的用戶訪問該頁面時,瀏覽器會自動發起GET請求,攜帶用戶的會話Cookie完成轉賬。

漏洞代碼特征

  1. 未校驗請求來源
# Flask漏洞示例
@app.route('/transfer', methods=['GET'])
def transfer():
    if 'user' in session:  # 僅檢查登錄狀態
        execute_transfer(request.args.get('to'), request.args.get('amount'))
    return "Success"
  1. 敏感操作使用GET方法
// 不安全的API設計
app.get('/api/change-email', (req, res) => {
    updateEmail(req.query.newEmail);
});

代碼級防護方案

1. 同步令牌模式(主流方案)

# Flask-WTF實現示例
from flask_wtf.csrf import CSRFProtect

app = Flask(__name__)
app.secret_key = 'secure_key'
CSRFProtect(app)

# 表單中自動生成令牌
<form action="/transfer" method="POST">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
    <!-- 其他表單字段 -->
</form>

2. 雙重Cookie驗證

// 前端設置自定義Header
fetch('/api/sensitive-action', {
    method: 'POST',
    headers: {
        'X-CSRF-TOKEN': getCookie('csrf_token')
    }
});

// 后端校驗(Express示例)
app.post('/api/sensitive-action', (req, res) => {
    if (req.cookies.csrf_token !== req.headers['x-csrf-token']) {
        return res.status(403).send('Invalid CSRF token');
    }
    // 處理邏輯
});

3. SameSite Cookie屬性

# Django配置示例
SESSION_COOKIE_SAMESITE = 'Strict'  # 或'Lax'
CSRF_COOKIE_SAMESITE = 'Strict'

進階防護策略

關鍵操作二次驗證

# 敏感操作要求重新認證
def change_password(request):
    if not request.user.check_password(request.POST.get('current_password')):
        return HttpResponse("密碼驗證失敗", status=403)
    # 更新密碼邏輯

請求頻率限制

// Express限流中間件
const rateLimit = require('express-rate-limit');
const csrfLimiter = rateLimit({
    windowMs: 15 * 60 * 1000, // 15分鐘
    max: 5 // 每個IP最多5次請求
});
app.use('/sensitive-action', csrfLimiter);

代碼審計要點

  1. 檢查所有狀態變更請求(POST/PUT/DELETE)是否包含CSRF防護
  2. 驗證令牌的生成和校驗是否使用安全隨機數
  3. 確認Cookie設置了HttpOnlySameSite屬性
  4. 審計是否存在JSONP/CORS配置不當導致的安全隱患

總結

有效的CSRF防護需要:
? 敏感操作使用POST/PUT/DELETE方法
? 實現同步令牌或雙重Cookie驗證
? 合理設置Cookie安全屬性
? 關鍵操作增加二次驗證
? 配合日志監控和異常檢測

通過代碼層面的多重防護,可以顯著降低CSRF攻擊風險,建議結合OWASP CSRF防護指南進行定期安全審計。 “`

(注:實際字數為約720字,可根據需要擴展具體框架的實現細節或增加案例分析)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女