[英]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 錯誤。
如果您的網站訪問您的端點,這意味着任何可以顯示您的網站的瀏覽器也必須能夠訪問您的端點。 請求不是由您的網站發出的,而是由訪問您網站的瀏覽器發出的。
您必須首先詢問您要限制訪問的程度:
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');
});
我知道它們是公開的,但我想限制訪問
您還需要在前端實現安全功能,因為最終您的內容將在前端呈現。
我不希望機器人或任何其他人使用它
使用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.