-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Mk:apiExternalの送信先を連合中のサーバーに限定 #12047
Conversation
Codecov ReportAttention:
Additional details and impacted files@@ Coverage Diff @@
## develop #12047 +/- ##
===========================================
+ Coverage 78.81% 78.91% +0.10%
===========================================
Files 958 958
Lines 104272 104281 +9
Branches 8335 8365 +30
===========================================
+ Hits 82177 82296 +119
+ Misses 22095 21985 -110 ☔ View full report in Codecov by Sentry. |
packages/frontend/src/scripts/api.ts
Outdated
if (!/^https?:\/\//.test(hostUrl)) throw new Error('invalid host name'); | ||
if (endpoint.includes('://')) throw new Error('invalid endpoint'); | ||
const knownUrls = (await api('federation/instances', { blocked: false })).map(v => v.host); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- ページネーションしない限りfederation/instancesで取得できるのはごく一部
- かといって全て取得するのもパフォーマンス的に現実的ではない
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
URLを渡せば連合中であるかを返してくれるエンドポイントとかってありましたっけ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
自己解決しました
* Update api.ts * Update api.ts * lint
このPRによるapi.jsonの差分 差分はこちら |
うーーーむパフォーマンス上の影響が気になるわね |
詳しくお願いします |
CORSのpreflight requestみたいに、APIリクエストするのに自分と相手の両方のサーバーにリクエストが発生するのはスマートではない気がするという感じですね |
とはいえ、トークンというセンシティブな情報を扱う(可能性がある)以上、preflightに相当する手順は必須になるような気がしますが… |
そうなるとやっぱりapiExternalは提供を保留した方が良いかも(このPRを取り込んだとしてもセキュリティ的に万全になるわけではないし) |
信頼できないプラグインは入れた時点で他のことで何やるかわからんし、信頼できてるなら防御しなくてもいいわけで、正直私はいらないと思う。 ブラウザで見るページと違い、手動で入れなければならないので、普通のブラウザとは話が違うと思う |
apiExternalはPlayでも使えなかったっけ |
ソフトウェア開発の経験の無い人に今入れようとしているスクリプトが信用できるかできないかを判断するのはすごく難しいものだし、結構長いスクリプトの中に悪意のあるコードが紛れ込むのは全然あり得る話なのでユーザーが良いと言ったから大丈夫とするのはあまり良くないと思います |
Playもソースは見られるので、その点ではプラグインでもPlayでも変わらない気がします…? |
ソースコード見てからPlayを実行する人が存在するとは思えないですがapiExternalのためにPlayもソースコードを確認してから実行しなければならないものとするのですか? |
セキュリティ万全とはいかないまでも、このPRにより、トークンを詐取するのに必要なハードルが「'api/...'のエンドポイントを受け付けるサーバーが必要」から「最低限のactivityPubの機能を実装したサーバーが必要」まで上がるので、かなり効果があるのではと考えています。 |
playってトークン扱えるんでしたっけ 使えないならブラウザもあんまり防御してないしあんまり細かくやらんでもいいんじゃねと思ったり |
PlayはapiExternalさえなければほぼ安全ですが、プラグインは既にopen_urlがあるので今更…という感じではあります |
そのように主張したつもりはありませんでした。 |
apiExternalが存在することによるメリットよりそういった懸念の方が上回りそうだから提供は一時停止する方向にします🙏 |
@syuilo また、下手に危険性を指摘すると機能ごと削除されてしまうような環境では、リスクを指摘する人々が萎縮してしまいます。 |
慎重に判断しました |
FYI: misskey.ioではapiExternalは削除される方針っぽい |
なら仕方ないですが、プラグインの方だけでも残す方向にはできませんか? |
そっちは残しても良いと思う |
いや、自分の情報が外部サーバーに勝手に送信される可能性があるのは結構危険だからプラグインについても削除した方が良さそうに思えてきた |
Plugin:open_url についても議論の余地がありそう |
What
Mk:apiExternalの送信先が
federation/instances {blocked: false}のレスポンスに含まれないものfederation/show-instance
がnullを返す/isBlockedがtrueの場合にエラーを出すようにします。Why
#12040
Additional info (optional)
apiExternal自体の動作確認は出来ていません
Checklist