簡體   English   中英

如何保證我的 node.js 端點安全並且只能從我的網站訪問?

[英]How to keep my node js endpoints safe and to be accessible only from my website?

Nodejs編碼的端點......我使用以下代碼來保證它們的安全......

const corsOption = {
    origin: ['https://www.mywebsite.com'],
};
app.use(cors(corsOption));

if (host !== "myendpoint.com") {
  return res.status(403).json({ message: "forbidden access" });
}

這些會保證我的端點安全嗎……或者我是否必須為我的端點做更多的事情來保證它們的安全……我不希望機器人或其他任何人使用它……我知道它們是公開的,但我想要限制訪問...請提供任何幫助或建議???

謝謝你

為確保您可以控制誰可以訪問您的端點,您可以設置令牌身份驗證。 當您向端點發送請求時,header 應包括:

Authorization: Token {your token}

在您的端點中,您可以檢查令牌是否已授權(通過將授權令牌存儲在數據庫中)。 如果令牌未被識別,您可以發回 403 錯誤。

如果您的網站訪問您的端點,這意味着任何可以顯示您的網站的瀏覽器也必須能夠訪問您的端點。 請求不是由您的網站發出的,而是由訪問您網站的瀏覽器發出的。

您必須首先詢問您要限制訪問的程度:

  • 僅限於您通過郵件向其發送密碼的個人已知用戶,然后他們必須在您的網站上輸入密碼(“登錄”),然后才能向您的端點發出任何請求。
  • 僅限自行注冊的用戶。 世界上任何人都可以自行注冊,還是您需要通過 email 地址進行確認?
  • 僅限可以使用其 Google(或 Facebook,或...)帳戶登錄的用戶。

Zain_Ul_Din 的回答顯示了“自注冊”案例的可能實施細節。 另請參閱將社交登錄(使用 Google 登錄)添加到現有電子郵件/密碼應用程序和數據庫的最佳方式是什么?

問題:這些會保證我的端點安全嗎

是的,它將保護端點

但是硬編碼host不是一個好習慣讓我們假設你想允許多個hosts那么這種方法將不起作用。


我是否需要為我的端點做更多的事情來保證它們的安全

相反,您可以使用JWT JSON Web 令牌來確保它們

基本概況

  • 下載JWT package
   npm install jsonwebtoken
  • 創建密鑰
   const jwt = require('jsonwebtoken');
   const secretKey = 'my-secret-key';
   
   const token = jwt.sign({ username }, secretKey);

   // Send the JWT to the client
   res.send({ token });
  • 創建自定義middleware
function verifyToken(req, res, next) {
  // Get the JWT from the request header
  const token = req.headers['x-access-token'];

  // If there is no token, return an unauthorized error
  if (!token) {
    res.sendStatus(401);
  }

  // If there is a token,
  // verify it and attach the decoded payload to the request object
  try {
    const decoded = jwt.verify(token, secretKey);
    req.user = decoded;
    next();
  } catch (err) {
    res.sendStatus(401);
  }
}
  • 在受保護的路由上使用驗證令牌中間件:

app.get('/protected', verifyToken, (req, res) => {
  res.send('Protected route accessed');
});

詳細了解JWT


我知道它們是公開的,但我想限制訪問

您還需要在前端實現安全功能,因為最終您的內容將在前端呈現。


我不希望機器人或任何其他人使用它

使用CAPTCHAs來驗證用戶是人。 驗證碼可以使用 Google reCAPTCHA等服務來實現。

您可以在您的Node.js app中實現用戶認證和授權來限制訪問。 為此,您可以使用jsonwebtoken npm package。

在 google 上查找 John Smilga 的節點和表達項目以獲得包含 4 個項目的 10 小時視頻。 其中一個項目介紹了 JSON web 代幣以及如何使用它們。我強烈推薦。

您還可以使用express-rate-limit package。有了這個,您應該能夠“限制”用戶在設定的時間內可以向您的 API 端點發出多少請求。 如果請求超過該限制,則此中間件會介入並停止進一步訪問(我自己尚未在生產中對其進行測試,但看起來不錯)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM