如何保护开放式 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) => {});