如何保护开放式 REST API 免受 Node.js 中的滥用?
How to secure an open REST API from abuse in Node.js?
例如,我有一个用 Node.js 编写的 REST api 端点。非技术用户可以从网页访问,也可以使用 curl 命令通过命令行访问。它不需要任何凭据即可访问它,因为它旨在对任何人开放以供访问。我要解决的问题是如何防止有人恶意访问这个 REST API 端点,例如一遍又一遍地 ping 这个 api 端点,或者如何防止 ddos 攻击。
不一定是编程问题,让我知道是否有更好的地方可以问这个问题。
你说你希望它是开放的,但你又说你希望它有点开放!
节流/授权令牌。至少选一个,两个都选。
Ping 和 DOS 攻击是不同的,与您的 API 本身无关。除非您的信息有价值/极具竞争力,否则像 IP 禁令这样简单的事情会大有帮助。
设置速率限制 如果你不能对其进行授权。
如果你使用 express,你可以使用这个 https://www.npmjs.com/package/express-rate-limit
如果不使用像 CloudFlare 这样的解决方案,防止 DDOS 并不是那么容易。
为了保护您的 REST api,如果您使用 express
,则可以使用 middleware
const checkAuth = (req, res, next) => {
// logic for checking auth
if (authorized) {
return next();
}
res.status(401).send('NEED AUTH');
};
router.post('/login', checkAuth, (req, res, next) => {
// actual logic for login
});
更新:关于@Akarsh 的回答,
您可以在实际逻辑之前使用多个中间件。例如,一个用于身份验证,一个用于速率限制
router.post('/logic', checkAuth, rateLimit, (req, res, next) => {});
例如,我有一个用 Node.js 编写的 REST api 端点。非技术用户可以从网页访问,也可以使用 curl 命令通过命令行访问。它不需要任何凭据即可访问它,因为它旨在对任何人开放以供访问。我要解决的问题是如何防止有人恶意访问这个 REST API 端点,例如一遍又一遍地 ping 这个 api 端点,或者如何防止 ddos 攻击。
不一定是编程问题,让我知道是否有更好的地方可以问这个问题。
你说你希望它是开放的,但你又说你希望它有点开放!
节流/授权令牌。至少选一个,两个都选。
Ping 和 DOS 攻击是不同的,与您的 API 本身无关。除非您的信息有价值/极具竞争力,否则像 IP 禁令这样简单的事情会大有帮助。
设置速率限制 如果你不能对其进行授权。
如果你使用 express,你可以使用这个 https://www.npmjs.com/package/express-rate-limit
如果不使用像 CloudFlare 这样的解决方案,防止 DDOS 并不是那么容易。
为了保护您的 REST api,如果您使用 express
middleware
const checkAuth = (req, res, next) => {
// logic for checking auth
if (authorized) {
return next();
}
res.status(401).send('NEED AUTH');
};
router.post('/login', checkAuth, (req, res, next) => {
// actual logic for login
});
更新:关于@Akarsh 的回答, 您可以在实际逻辑之前使用多个中间件。例如,一个用于身份验证,一个用于速率限制
router.post('/logic', checkAuth, rateLimit, (req, res, next) => {});