【发布时间】:2017-08-02 13:40:05
【问题描述】:
例如,我有一个用 Node.js 编写的 REST api 端点。非技术用户可以从网页访问,也可以使用 curl 命令通过命令行访问。它不需要任何凭据即可访问它,因为它旨在对任何人开放以访问它。我要解决的问题是如何防止有人恶意访问这个 REST API 端点,例如一遍又一遍地 ping 这个 api 端点,或者如何防止 ddos 攻击。
不需要编程问题,如果有更好的地方可以问这个问题,请告诉我。
【问题讨论】:
例如,我有一个用 Node.js 编写的 REST api 端点。非技术用户可以从网页访问,也可以使用 curl 命令通过命令行访问。它不需要任何凭据即可访问它,因为它旨在对任何人开放以访问它。我要解决的问题是如何防止有人恶意访问这个 REST API 端点,例如一遍又一遍地 ping 这个 api 端点,或者如何防止 ddos 攻击。
不需要编程问题,如果有更好的地方可以问这个问题,请告诉我。
【问题讨论】:
如果不使用 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) => {});
【讨论】:
你说你希望它是开放的,但你又说你希望它是开放的!
限制/授权令牌。至少选择一个,两个都首选。
Pinging 和 DOS 攻击是不同的,因此与您的 API 无关。除非您的信息有价值/极具竞争力,否则像 IP 禁令这样简单的事情将大有帮助。
【讨论】:
设置速率限制,如果您不能对其进行身份验证。
如果您使用的是快递https://www.npmjs.com/package/express-rate-limit,则可以使用它
【讨论】: