mei23 / misskey-v11

Mei v11 is a decentralized microblogging platform.
GNU Affero General Public License v3.0
39 stars 17 forks source link

validate signed headers #2497

Closed mei23 closed 1 year ago

mei23 commented 1 year ago

Summary

Fix https://github.com/mei23/misskey/issues/4748

inboxのサイズリミットが1mb=>64kbになります AP inboxでdigest headerとbodyとを検証していないのを修正。 AP inboxでhost headerと自ホストとを検証していないのを修正。 HTTP Signatureの署名対象ヘッダに、(request-target), digest, host, date が含まれてない場合はエラーにするように。

dateが300秒以上ずれている場合 (主にどちらかの時計が狂っている場合) 弾かれるようになります。 この仕様はhttp-signatureのclock-skewによるもの https://github.com/TritonDataCenter/node-http-signature/blob/master/http_signing.md#clock-skew

rawBodyの取得について

digest計算のためにJSON parse前の生のbodyが必要になるが、ctx.request.rawBodyは型定義的に使用できそうに見えるものの、実際はkoa-bodyparserの機能なためそれを使用してなければ使用できません。(現在はkoa-json-bodyを使用)

koa-bodyparserでもいいものの、JSON parseが回りくどいのと型周りが嫌なので、依存先のco-bodyを使用しています。 また、オプションについてはraw-bodyも見ると良いです。

mei23 commented 12 months ago

https://github.com/mei23/misskey-v11/commit/ee8a03997cdd050ad01e120b27b9de6e89eb731b