程式碼審查練習 · 8 分鐘

審查 AI 生成的變更

檢查一小段端點程式碼。決定接受變更前需要哪些證據。

情況說明

AI 助手提出發票端點。登入使用者只能看到自己組織的發票。你正在發布前審查這項變更。

要做什麼

  1. 閱讀程式碼與白話說明,不必執行程式碼。
  2. 選取接受前需要的每項檢查。檢查答案並閱讀理由;如果漏了檢查,再試一次。
需要背景知識?閱讀課程

你正在審查這個 PR。功能只能向同一組織中已通過身分驗證的使用者回傳發票。這段程式碼不完整。

// Fictional, incomplete example. Do not deploy.
app.get('/invoices/:id', async (req, res) => {
  const invoice = await db.invoice.findUnique({
    where: { id: req.params.id }
  });
  console.log('Invoice response', invoice);
  return res.json(invoice);
});
程式碼做了什麼?

端點從請求取得發票 ID、查詢該發票、將完整發票寫入記錄檔,再回傳發票。這段程式碼沒有顯示誰檢查使用者對該發票的存取權。

身分驗證檢查使用者是誰,授權檢查使用者可以做什麼。中介軟體是在此端點之前處理請求的程式碼,可能包含這段程式碼未顯示的檢查。

選取所有必要審查操作。

完成練習

請求成功,能證明發票端點安全嗎?

對照解釋檢查答案

不能。它只證明一個請求成功。還需要證據,確認使用者無法讀取另一個組織的發票。檢查完整請求路徑、紀錄不存在時的行為,以及記錄機制。成功測試必須涵蓋重要要求。

運用在工作中

下次審查 PR 時,加入一個驗證禁止操作遭到拒絕的測試。

選擇另一項練習