使用AI智能體編碼可能帶來(lái)的隱患與解決方法
譯文譯者 | 核子可樂(lè)
審校 | 重樓
隨著市場(chǎng)熱情接納ChatGPT、Claude、Cursor和GitHub Copilot等AI驅(qū)動(dòng)編程智能體的過(guò)程中,許多開(kāi)發(fā)者似乎忘記了一個(gè)基本事實(shí):代碼的意義不止在于是否有效,更應(yīng)重視安全性、可靠性與可維護(hù)性。
本文將結(jié)合實(shí)踐經(jīng)驗(yàn),探討AI輔助開(kāi)發(fā)可能造成的隱患,并提供清晰可行的規(guī)避策略。
風(fēng)險(xiǎn)一:看似正確的代碼卻可能埋下“暗雷”
AI往往會(huì)生成語(yǔ)法正確、能夠順利編譯及運(yùn)行,但在特定條件下卻會(huì)引發(fā)行為異常的代碼。
真實(shí)案例:AI建議的函數(shù)中暗藏?cái)?shù)據(jù)損壞風(fēng)險(xiǎn)。
// 由AI生成
function updateInventory(itemId, quantity) {
db.items.find({ id: itemId }).quantity += quantity;
}
看著沒(méi)毛病,對(duì)吧?但其不會(huì)更新數(shù)據(jù)庫(kù)——因?yàn)閒ind()返回的是副本,而非引用。這可能會(huì)悄悄破壞整個(gè)生產(chǎn)環(huán)境中的數(shù)據(jù)邏輯。
修復(fù):
await db.items.updateOne({ id: itemId }, { $inc: { quantity } });
規(guī)避方法: 堅(jiān)持驗(yàn)證所使用數(shù)據(jù)模型及數(shù)據(jù)庫(kù)方法。請(qǐng)記住,AI無(wú)法識(shí)別你的數(shù)據(jù)架構(gòu)。
風(fēng)險(xiǎn)二:上下文缺失導(dǎo)致的安全漏洞
AI經(jīng)常會(huì)忽略掉關(guān)鍵上下文,例如身份驗(yàn)證、授權(quán)與數(shù)據(jù)清洗,這些問(wèn)題在動(dòng)態(tài)路由或表單中體現(xiàn)得尤其明顯。
真實(shí)案例:Admin Route中未進(jìn)行授權(quán)檢查。
app.get('/admin/export', async (req, res) => {
const data = await getSensitiveData();
res.send(data);
});
沒(méi)有中間件、也沒(méi)有訪問(wèn)控制,因此該路由可能在生產(chǎn)環(huán)境中暴露。
修復(fù):
app.get('/admin/export', isAuthenticated, isAdmin, async (req, res) => {
const data = await getSensitiveData();
res.send(data);
});
規(guī)避方法:添加安全提示詞,而后手動(dòng)檢查各路由的訪問(wèn)控制。
風(fēng)險(xiǎn)三:使用不受信的輸入進(jìn)行依賴項(xiàng)注入
AI可能在不知不覺(jué)中建議將用戶控制的變量注入至不安全的上下文當(dāng)中。
真實(shí)案例:通過(guò)未轉(zhuǎn)義的變量進(jìn)行模板注入
res.send(`<div>Hello ${req.query.name}</div>`);
If nameis <script>alert(1)</script>, you've got XSS.
修復(fù):
const escape = require('escape-html');
res.send(`<div>Hello ${escape(req.query.name)}</div>`);
規(guī)避方法:
切勿盲目信任由用戶輸出生成的輸出——注意進(jìn)行轉(zhuǎn)義或代碼凈化。
如何避免落入上述陷阱
- 謹(jǐn)慎處理提示詞: 在提示詞中包含“安全”、“可靠”、“類(lèi)型檢查”及“慣用”等術(shù)語(yǔ)。
- 審查所有內(nèi)容: 默認(rèn)所有內(nèi)容都無(wú)法達(dá)到生產(chǎn)環(huán)境要求。審查代碼的正確性、安全性及上下文。
- 結(jié)合靜態(tài)分析: 使用ESLint、SonarQube或SAST等工具來(lái)捕捉結(jié)構(gòu)性缺陷。
- 編寫(xiě)測(cè)試(配合AI):要求AI生成邊緣用例測(cè)試,而后自動(dòng)擴(kuò)展。
- 注意,AI只是我們的輔助“大腦”,而非輔助工程師。
寫(xiě)在最后
AI智能體的確擅長(zhǎng)提出新思路并顯著提升效率。然而,在代碼的安全性和可維護(hù)性方面,人類(lèi)仍將長(zhǎng)期占據(jù)主導(dǎo)。
總之,請(qǐng)相信你自己的判斷,而非過(guò)度依賴自動(dòng)補(bǔ)全。
原文標(biāo)題:The Hidden Risks of Coding with AI Agents (and How to Avoid Them),作者:Irvan Gerhana Septiyana