プロジェクトの削除にもう一段階確認が欲しい
現状設定から削除ボタンを押してプロジェクト名を入れてボタンを押せばスッと API に DELETE リクエストが送信されて削除されてしまう。これって
サービスに XSS があった時
他人のプロジェクトの user.js を読み込んでいたらそれがマルウェアなスクリプトに後から書き換えられた時
まあこんなん知らんわという話はあるが、それにしても簡単に外部プロジェクトの user.js 読み込めるので
とかにスッとプロジェクトが削除されてしまって、あまりよい体験というか
セキュリティではないと思う。
通常だとパスワード入力をして秘匿情報知ってないと削除できない、とかなってることが多いと思うが、 Scrapbox は基本 Google アカウント認証しかないのでそれもできない。ということですくなくとも Scrapbox 側はプロジェクト作成者のメールアドレスとかは知ってるので、そこに確認メール投げて、そのメールに書かれている token 付き URL 踏んだら削除、みたいにしてほしい。
プロジェクトを削除するUserScript
script(async () => {
const projectName = location.href.split('/')[3];
const url = 'https://scrapbox.io/api/projects/' + projectName;
await fetch(url, { method: 'DELETE' });
})()
CSRF Token とか送ってるのでこれほど簡単じゃないとは思う
試してみましたが 403 Forbidden
が返ってきました。このページに書いてある懸念はないと考えられます。
CSRF Token もつけて送ればいいだけでしょ、秘匿情報確認してないんだからどうとでもやりようがある
すみません、CSRF Tokenが何なのかよくわからなかったので……
UserScriptからProjectを削除できることを確認しました 具体的な方法は伏せておきます
自分のページに直接書き込まれた場合は、UserScriptの確認messageが出たときに確認すればまだ防げますが、 import
先のprojectで仕込まれていた場合は対処できません
確かにこれは対処したほうが良いと思います
なるほど。Project設定画面にreCAPTCHAを付けようと思います
自分で中身を確認して信用したUserScriptだけを読み込むべきだと思います
他人のUserScriptは安全な物でも、信用できる物でもありません
projectの削除は保護できても、引き続きページを1つ1つ削除したり、ページの中身を改変したり、ページ本文や招待URLを外部に送信したり、メンバーを削除したり、Owner権限を譲渡したり、projectをprivateからpublicに変更したりは可能なので
現実的な攻撃の可能性はこれですね
不特定多数が参加できるprojectに参加していて
projectを表示した時に「UserScriptが書き換わったけど再読み込みする?」というメッセージを見て
内容を確認せずに再読込してしまうと
自分が管理者である全projectを削除だけでなく、改変、公開、権限奪取されてしまう事がある
設定画面での説明が不十分ではある