diff options
| author | MeiMei <30769358+mei23@users.noreply.github.com> | 2022-05-31 17:44:22 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-31 17:44:22 +0900 |
| commit | c05723ca6ad4f17b823662e83ed8b442fe10626a (patch) | |
| tree | f38e26f44e7ef714d37e196a319d7129a0391962 /packages/backend/src/server/api/call.ts | |
| parent | chore(meta): label Pull Requests containing tests (#8768) (diff) | |
| download | sharkey-c05723ca6ad4f17b823662e83ed8b442fe10626a.tar.gz sharkey-c05723ca6ad4f17b823662e83ed8b442fe10626a.tar.bz2 sharkey-c05723ca6ad4f17b823662e83ed8b442fe10626a.zip | |
Fix IP address rate limit (#8758)
* Fix IP address rate limit
* CHANGELOG
* Tune getIpHash
Diffstat (limited to 'packages/backend/src/server/api/call.ts')
| -rw-r--r-- | packages/backend/src/server/api/call.ts | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/packages/backend/src/server/api/call.ts b/packages/backend/src/server/api/call.ts index fbe25e1732..cd3e0abc06 100644 --- a/packages/backend/src/server/api/call.ts +++ b/packages/backend/src/server/api/call.ts @@ -6,7 +6,7 @@ import endpoints, { IEndpointMeta } from './endpoints.js'; import { ApiError } from './error.js'; import { apiLogger } from './logger.js'; import { AccessToken } from '@/models/entities/access-token.js'; -import IPCIDR from 'ip-cidr'; +import { getIpHash } from '@/misc/get-ip-hash.js'; const accessDenied = { message: 'Access denied.', @@ -33,18 +33,13 @@ export default async (endpoint: string, user: CacheableLocalUser | null | undefi throw new ApiError(accessDenied); } - if (ep.meta.requireCredential && ep.meta.limit && !isModerator) { + if (ep.meta.limit && !isModerator) { // koa will automatically load the `X-Forwarded-For` header if `proxy: true` is configured in the app. let limitActor: string; if (user) { limitActor = user.id; } else { - // because a single person may control many IPv6 addresses, - // only a /64 subnet prefix of any IP will be taken into account. - // (this means for IPv4 the entire address is used) - const ip = IPCIDR.createAddress(ctx.ip).mask(64); - - limitActor = 'ip-' + parseInt(ip, 2).toString(36); + limitActor = getIpHash(ctx!.ip); } const limit = Object.assign({}, ep.meta.limit); |