无主之地2配置高吗|看真人裸体BBBBB|秋草莓丝瓜黄瓜榴莲色多多|真人強奷112分钟|精品一卡2卡3卡四卡新区|日本成人深夜苍井空|八十年代动画片

網易首頁 > 網易號 > 正文 申請入駐

一次代碼審計捅出10個漏洞:拼接SQL全是破綻

0
分享至

周三下午兩點,我們小組——Aki、Lark和Carl——打開那個用Flask寫的Python小應用,準備按課程要求做安全審計。應用功能不復雜,一個登錄頁,一個發帖頁,數據庫是sqlite3。老師定下的范圍就三個:SQL注入、CSRF和XSS,但我們一路看下來,修到根本停不住。最后統計,光是SQL注入就挖出七個,CSRF兩個,XSS一個,還有一些順手補上的邏輯坑。下面把最典型的四個SQLi原樣復現一遍,代碼怎么寫的、攻擊者怎么打、我們又怎么修,都擺明了。看完你可能會重新審視自己項目里那些“就先這么拼一下”的查詢。

先交代一句原應用是怎么構造SQL的。開發者在每個請求處理里,直接用加號把用戶輸入懟進查詢字符串。比如從表單拿用戶名和密碼,一拼接就扔給cursor執行。但凡輸入框、Cookie、URL參數,全都沒做任何過濾或轉義。這種做法像把前門鑰匙埋在地墊下,還掛個牌子“歡迎取用”。


SQLi?1:從密碼框把整條WHERE篡了

登錄驗證的查詢原本長這樣:
res = cur.execute("SELECT id from users WHERE username = '" + request.form["username"] + "' AND password = '" + request.form["password"] + "'")
攻擊者完全不需要知道真實密碼。在用戶名框填入正常的alice,密碼框填' OR '1'='1。拼接之后,WHERE子句變成了:
WHERE (username = 'alice' AND password = '') OR ('1'='1')
'1'='1'永遠成立,數據庫直接把alice那行返回。于是攻擊者連密碼都不用試,就拿到了alice的登錄態。

修復很簡單:參數化查詢。把占位符?和參數元組傳給execute,讓驅動器自己去區分代碼和數據。改成:
res = cur.execute("SELECT id FROM users WHERE username = ? AND password = ?", (request.form["username"], request.form["password"]))
這一步幾乎消滅后續所有基于拼接的注入點。

SQLi?2:注釋掉整個WHERE條件,連用戶名都不用知道

同樣是那個登錄查詢。這次攻擊者連具體用戶都不指定。用戶名輸入' OR 1=1 -- (注意末尾有個空格),密碼隨便填。拼接后得到:
WHERE username = '' OR 1=1 -- ' AND password = '...'
雙橫線把后面的密碼檢查全部注釋,1=1又恒為真,于是數據庫返回第一行用戶。攻擊者稀里糊涂就成了系統里第一個注冊的人,毫無障礙。這在某些內部系統里可能就是管理員賬號。

修法跟SQLi?1一模一樣,轉參數化。但這件事暴露出一個更深的問題:原代碼對SQL注釋符沒有任何警惕,說明連接口本身根本沒考慮惡意片段。哪怕用了參數化,如果后頭還有動態拼接ORDER BY或表名的地方,仍然危險——后面幾條我們會看到同樣的毛病。

SQLi?3:指名道姓繞過密碼,針對性劫持

假如攻擊者已知道一個有效用戶名,比如alice,他就在用戶名框輸入alice' --,密碼隨便。拼接結果:
WHERE username = 'alice' -- ' AND password = '...'
注釋把密碼校驗砍掉,數據庫只根據用戶名查,直接命中alice。這個手法比前兩條更精準,攻擊者可以專門瞄準某個賬號,比如運維人員或高權限用戶。

修復依然是參數化。但這時我們開始翻程序中所有構建查詢的地方,因為只要還有一處是字符串拼接,攻擊者就能找突破口。于是發現了Cookie驗證那塊。

SQLi?4:篡改Cookie拿走任意會話

驗證登錄態的代碼從Cookie里取session_token,直接縫合進INNER JOIN查詢:
res = cur.execute("SELECT users.id, username FROM users INNER JOIN sessions ON " + "users.id = sessions.user WHERE sessions.token = '" + request.cookies.get("session_token") + "'")
攻擊者打開瀏覽器開發者工具的應用程序面板,找到對應域名的Cookie,把session_token的值改成' OR '1'='1。刷新頁面后,查詢變成:
WHERE sessions.token = '' OR '1'='1'
條件恒真,數據庫返回所有用戶的第一條匹配記錄,攻擊者就能以某個合法用戶身份進入首頁。這次連登錄表單都不用碰,直接通過Cookie注入。

修復照舊:參數化。但這里提醒我們,所有外部輸入都要視為不可信,Cookie、Header、URL參數,一個都不能漏。另外,這個應用用了純粹拼接的動態表鏈接,也為后續的CSRF埋下了雷。

上面四個SQL注入模式占了我們挖到的一半。其余三個雖然形態不同——比如Union查詢直接拖庫、通過報錯信息推斷表結構、利用二階注入——但根源一致:字符串拼接。我們照著參數化路子一一改掉,之后重新審查所有SQL語句,把剩下的動態ORDER BY和表名用白名單映射,徹底切斷拼接路徑。至于CSRF和XSS漏洞,也都跟輸入輸出處理有關:CSRF因為請求里沒帶任何驗證Token,攻擊者可以偽造帖子創建請求;XSS則出現在帖子內容渲染時沒轉義,直接丟進HTML。這兩類修起來同樣是加Token、對輸出做轉義,但那是下一次分享的內容。

回過頭看,這個應用的問題不怪Flask,也不怪sqlite3,而是“先拼再執行”的習慣太順手。很多原型和內部工具就是這么起來的,上線后才補課。好在參數化幾乎零成本,看完這些攻擊寫法,你回去查一下自己的項目里有沒有+ request.form[...]f"...{input}..."出現在SQL旁邊,有就趕緊換成占位符——補一個算一個。

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
剛剛,直線拉升!狂飆12%!特朗普,突然發聲

剛剛,直線拉升!狂飆12%!特朗普,突然發聲

新浪財經
2026-05-31 12:43:53
解放軍代表質問日防衛大臣:日本何時向亞洲受害國道歉?小泉進次郎這樣說

解放軍代表質問日防衛大臣:日本何時向亞洲受害國道歉?小泉進次郎這樣說

環球網資訊
2026-05-31 12:01:18
羅馬尼亞遭襲后,梅德韋杰夫警告:歐盟已進入與俄羅斯的戰爭

羅馬尼亞遭襲后,梅德韋杰夫警告:歐盟已進入與俄羅斯的戰爭

澎湃新聞
2026-05-31 11:04:28
貴陽花果園閃婚騙局調查:娶妻流水線,女子上午離婚下午結婚

貴陽花果園閃婚騙局調查:娶妻流水線,女子上午離婚下午結婚

上游新聞
2026-05-31 14:46:25
烏雙線雙殺,俄當日戰損1560人,川普又開始吹捧烏克蘭

烏雙線雙殺,俄當日戰損1560人,川普又開始吹捧烏克蘭

史政先鋒
2026-05-31 16:46:18
50歲后才懂,夏天的熱是最好的補藥

50歲后才懂,夏天的熱是最好的補藥

詩詞天地
2026-05-30 06:00:13
41歲夫妻因“房事頻繁”雙雙入院,醫生提醒:每周不應超過一個數

41歲夫妻因“房事頻繁”雙雙入院,醫生提醒:每周不應超過一個數

醫學原創故事會
2026-05-29 23:34:07
高顏值美女曬出和邋遢男友旅游合照,網友們看完炸鍋了

高顏值美女曬出和邋遢男友旅游合照,網友們看完炸鍋了

微微熱評
2026-05-31 14:27:06
13個打工人,馬上成為億萬富豪?

13個打工人,馬上成為億萬富豪?

中國新聞周刊
2026-05-31 15:54:00
你慶幸自己看過哪本含金量極高的書?網友:顛覆了認知,再不內耗

你慶幸自己看過哪本含金量極高的書?網友:顛覆了認知,再不內耗

夜深愛雜談
2026-05-30 08:34:39
小仙女“戰敗”!見面3次索要六一節禮物,610元嫌少,被男方怒斥

小仙女“戰敗”!見面3次索要六一節禮物,610元嫌少,被男方怒斥

火山詩話
2026-05-31 14:54:31
韓國國腳狂喜:決賽1分鐘未出場 連續2年躺拿歐冠冠軍 789萬獎金

韓國國腳狂喜:決賽1分鐘未出場 連續2年躺拿歐冠冠軍 789萬獎金

侃球熊弟
2026-05-31 04:02:10
剛剛,國務院一紙令下,在中國延續了68年的戶口戰爭終于落幕

剛剛,國務院一紙令下,在中國延續了68年的戶口戰爭終于落幕

浪子的煙火人間
2026-05-31 01:25:03
在國安局退休后,發現鄰居每天準時曬被子,被子顏色是在傳遞機密

在國安局退休后,發現鄰居每天準時曬被子,被子顏色是在傳遞機密

千秋文化
2026-05-28 19:38:07
文班全票獲西決MVP:首次季后賽率馬刺重返總決賽 賽后抱頭痛哭

文班全票獲西決MVP:首次季后賽率馬刺重返總決賽 賽后抱頭痛哭

醉臥浮生
2026-05-31 11:00:47
發現了沒?網吧數量反彈到12萬,營收破1000億,評論區全是真相!

發現了沒?網吧數量反彈到12萬,營收破1000億,評論區全是真相!

譚談社會
2026-05-30 14:10:29
衛冕失敗!亞歷山大空砍35+9功虧一簣 兩連莊MVP卻無緣兩連冠

衛冕失敗!亞歷山大空砍35+9功虧一簣 兩連莊MVP卻無緣兩連冠

醉臥浮生
2026-05-31 10:49:15
降價2萬!上汽大眾官宣:全新SUV,價格下調

降價2萬!上汽大眾官宣:全新SUV,價格下調

科技堡壘
2026-05-31 09:34:47
下館子千萬別點這10道菜!全是預制菜“重災區”,很多人天天在吃

下館子千萬別點這10道菜!全是預制菜“重災區”,很多人天天在吃

房產衫哥
2026-05-31 14:01:04
鹽堿地種出的海水稻,口感難吃卻越種越多,國家為何要大力發展?

鹽堿地種出的海水稻,口感難吃卻越種越多,國家為何要大力發展?

向航說
2026-05-30 00:30:03
2026-05-31 18:23:00
碼上閑敘
碼上閑敘
有態度網友ytd
5539文章數 55關注度
往期回顧 全部

科技要聞

戴爾諾基亞又回來了!AI重估老牌科技公司

頭條要聞

江蘇一飛行營地墜機乘客身亡 家屬獲賠256萬稱將上訴

頭條要聞

江蘇一飛行營地墜機乘客身亡 家屬獲賠256萬稱將上訴

體育要聞

阿森納用最悲壯的方式,成就了巴黎王朝

娛樂要聞

賈玲最新動作!侯明昊給虞書欣抬轎!

財經要聞

醫學首席轉崗搞科技,A股科技股遭遇巨震

汽車要聞

900V+3.2秒破百 領克10+&領克10上市16.99萬元起

態度原創

教育
手機
家居
公開課
軍事航空

教育要聞

高考作文考科技千萬別這么寫 不能寫成論文,科技的硬,必須包裹上文化的軟

手機要聞

國產旗艦單品過百萬盤點,這個結果意外嗎?

家居要聞

云棲 舒展如流云

公開課

李玫瑾:為什么性格比能力更重要?

軍事要聞

解放軍代表質問日防衛大臣:日本何時道歉

無障礙瀏覽 進入關懷版