成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我在登錄功能埋的坑:HTTP重定向攻擊差點讓公司背鍋(附解決方案)

安全 應(yīng)用安全
上周我在公司捅了個簍子——自己寫的登錄模塊差點成了釣魚網(wǎng)站的幫兇。今天就跟大家嘮嘮這個驚險過程,以及怎么避免HTTP重定向攻擊這個"隱形炸彈"。

上周我在公司捅了個簍子——自己寫的登錄模塊差點成了釣魚網(wǎng)站的幫兇。今天就跟大家嘮嘮這個驚險過程,以及怎么避免HTTP重定向攻擊這個"隱形炸彈"。

一、那個讓測試妹子暴走的早晨

事情發(fā)生在某個陽光明媚的周一,測試組的小美突然沖進(jìn)我們開發(fā)組:"你們的登錄接口被劫持了!用戶點完登錄直接跳轉(zhuǎn)到賭博網(wǎng)站!"

我當(dāng)時的反應(yīng):"絕對不可能!我明明做了URL白名單驗證..."

1.1 問題重現(xiàn):用戶登錄變賭博

我們復(fù)現(xiàn)了問題場景:

  1. 用戶訪問 www.our-app.com/login?redirect=/profile
  2. 輸入正確賬號密碼
  3. 頁面跳轉(zhuǎn)到...澳門首家線上賭場(!)

我盯著瀏覽器的Network面板,發(fā)現(xiàn)請求里赫然有個302狀態(tài)碼:

HTTP/1.1 302 Found
Location: https://malicious-site.com?steal_cookie=123abc

關(guān)鍵問題解析:起初我們以為用戶訪問的是正常路徑/profile,但實際攻擊發(fā)生時,redirect參數(shù)是經(jīng)過精心偽裝的:

圖片圖片

攻擊者如何操作?

  1. 構(gòu)造釣魚鏈接:www.our-app.com/login?redirect=%2F%2Fmalicious-site.com(%2F是"/"的URL編碼)
  2. 服務(wù)器收到參數(shù)后:
// 未解碼直接拼接
String redirect = request.getParameter("redirect"); // 得到"http://malicious-site.com"
response.sendRedirect("https://our-app.com" + redirect);

實際跳轉(zhuǎn)地址變成:https://our-app.com//malicious-site.com瀏覽器自動解析為:https://malicious-site.com

為什么測試時沒發(fā)現(xiàn)?

我們在測試環(huán)境用的都是類似/profile的簡單路徑,完全沒料到這些騷操作:

  • //外部網(wǎng)站 的路徑拼接攻擊
  • @惡意域名 的特殊解析
  • %編碼 的繞過手法

二、解剖這只"重定向蟑螂"

2.1 重定向的工作原理

圖片圖片

就像快遞員送錯包裹:

  1. 用戶說:"送完這個去A地址"(帶redirect參數(shù))
  2. 服務(wù)器說:"好的,下個包裹送到B地址"(返回302+Location)
  3. 快遞員(瀏覽器)無腦照做

2.2 漏洞代碼長啥樣?

這是我最初寫的危險代碼(Java示例):

// 危險示范!請勿模仿!
String redirectUrl = request.getParameter("redirect");
response.sendRedirect(redirectUrl);

三、我是怎么填坑的

3.1 第一層防護(hù):白名單驗證

List<String> allowedPaths = Arrays.asList("/profile", "/dashboard");

if(!allowedPaths.contains(redirectParam)){
    redirectParam = "/default"; // 跳轉(zhuǎn)到安全頁面
}

3.2 第二層防護(hù):簽名校驗

給redirect參數(shù)加"防偽碼":

# 生成簽名
sign = hashlib.sha256(redirect_path + SECRET_KEY).hexdigest()
safe_url = f"{redirect_path}?sign={sign}"

# 驗證時
client_sign = request.GET.get('sign')
server_sign = hashlib.sha256(redirect_path + SECRET_KEY).hexdigest()
if client_sign != server_sign:
    abort(403)

3.3 第三層防護(hù):相對路徑轉(zhuǎn)換

把絕對URL變成相對路徑:

// 把 https://www.our-app.com/profile 轉(zhuǎn)為 /profile
function sanitizeRedirect(url) {
    return new URL(url).pathname;
}

四、預(yù)防重定向攻擊的五個要點

  1. 絕不信任客戶端傳參:把redirect參數(shù)當(dāng)嫌疑人審
  2. 禁用開放重定向:就像不給陌生人留家門鑰匙
  3. 設(shè)置跳轉(zhuǎn)延遲:重要操作前加二次確認(rèn)
  4. 記錄可疑日志:給異常跳轉(zhuǎn)裝監(jiān)控
  5. 定期安全掃描:用自動化工具查漏

五、血淚教訓(xùn)總結(jié)

這次事故讓我明白:安全不是功能,而是底線。現(xiàn)在每次處理重定向時,我都會默念三遍:

"用戶傳參猛于虎,未經(jīng)驗證就是賭,白名單加簽名鎖,安全紅線不能觸。"

最后送大家一個自查清單:

? [ ] 所有redirect參數(shù)是否強(qiáng)制校驗?

? [ ] 是否存在裸跳轉(zhuǎn)(直接拼接URL)?

? [ ] 是否配置了CSP安全策略?

? [ ] 是否禁用非必要的HTTP方法?

? [ ] 是否定期進(jìn)行滲透測試?

責(zé)任編輯:武曉燕 來源: 草捏子
相關(guān)推薦

2021-01-18 06:21:18

登錄SSO接口

2020-12-09 11:00:44

Nginx 運維Tomcat

2018-12-03 12:04:10

Kyligence解決方案

2011-03-07 14:29:18

2022-04-06 10:36:24

技術(shù)管理

2019-12-03 13:57:38

CIO背鍋IT

2020-10-21 11:20:42

MySQL數(shù)據(jù)庫Bug

2020-01-07 08:00:52

ApacheHTTPHTTPS

2020-11-12 07:46:34

HTTP

2024-06-24 00:30:00

2021-10-18 07:58:33

MyBatis Plu數(shù)據(jù)庫批量插入

2019-09-16 17:08:12

運維AIOpsIT運營

2011-10-25 11:40:54

打印機(jī)常見問題

2010-12-14 15:07:15

ICMP路由重定向

2015-03-03 10:47:06

視頻監(jiān)控解決方案昆騰公司

2024-06-13 12:44:49

2018-12-26 17:36:37

開發(fā)者技能阿里

2017-09-25 10:52:27

2021-12-14 11:53:26

微軟谷歌OAuth漏洞

2024-08-05 08:00:53

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美乱人伦视频 | av不卡一区 | 午夜一级大片 | 久久综合久久综合久久综合 | 中文一区二区 | 国产农村妇女毛片精品久久麻豆 | 中文字幕日韩欧美一区二区三区 | 免费一看一级毛片 | 福利av在线 | 日本不卡视频 | 一级一级一级毛片 | 欧美日韩精品一区二区三区四区 | 午夜精品一区二区三区在线观看 | 美女黄18岁以下禁止观看 | 久久久国产精品视频 | 欧美日韩国产在线观看 | a黄毛片 | 狠狠亚洲 | 久久精品国产亚洲一区二区 | 精品一区在线 | 一级a爱片久久毛片 | 精品美女视频在线观看免费软件 | 国产激情91久久精品导航 | 亚洲成人av一区二区 | 欧美日韩在线播放 | 亚洲毛片在线 | 一级欧美 | 亚洲不卡在线观看 | 成年人黄色一级毛片 | 九九亚洲 | 亚洲精品av在线 | 日本高清视频在线播放 | 国产日韩精品视频 | 国产区免费视频 | 亚洲精品乱码久久久久久黑人 | 日韩欧美在线一区 | 91久久久久久久久久久久久 | 亚洲xxxxx | 久久国产一区二区 | 成年人精品视频 | 美女逼网站|