generated at
UserScriptを他人のprojectから読み込むな
/customizeなど自分以外の人間が参加している/できるprojectからUserScriptを読み込まないようにしましょう!!!!

takkerもそうですが、自分のprojectにコピペするのをめんどくさがって他人のprojectから直接 import しちゃう人、いませんか?
今すぐやめましょう。今すぐです!!!
Just Do Itおじさん

どうして危ないのか
projectの削除owner権限の譲渡private pageの外部送信など、超絶危険なScriptを確認メッセージなしに実行させることができてしまう

対策
他人のprojectからUserScriptを絶対に import しない
代わりに自分だけが編集できる個人ProjectにUserScriptを置いて、そこからimportする
友人などが編集できるprojectでもいいですか?bsahd
UserScriptが更新されたら、まず自分のページを見に行く
Load new UserScript を押すのはその後

yuki_minoh
整理すると
招待リンクが公開されているページにあるUserScriptは、
可読形式でない(bundle, minifyされている)場合
importしてはいけません
可読形式の場合
第三者がコードを書き込むことを防ぐため、安全な場所にコピペしてから読み込みましょう
コードは目を通しておきましょう
という感じかな?

過去ログ
yuki_minoh
個人的には、ちょっと極端な反応かなとは思います
yuki_minohも似たようなことを過去にやりましたがw
より安全性の高くて利便性を保つ方法を実践しようぜ、みたいな方向性には大賛成です
信頼できる人しか入れないprojectなら極端かもしれないyosider
招待リンクが公開されているprojectの場合は怖いyosider
いや実際たしかにそうですよね。。。yuki_minoh
他人にユーザーページ変更されて読み込まさせられたりするとやばいもんね普通に
でも結局なんかコピペでインストールするようになってもここは変わんない。。。?
どこがセキュリティの要点になってるのかちょっとつかめてないですyuki_minoh
他者が編集できるprojectにあるUserScriptを読み込むところが問題になっていますtakker
編集されても警告が出ないから
そういうことね、理解したyuki_minoh
自分のページが直接書き換えれる場合は、警告が表示されるので、それを無視しない限り信頼できないコードが勝手に実行される事はありません
利便性と安全性のバランスの問題だと思っています
コピペしても、それだけだとバランスはあまり改善しない気はします
コピペしても、元のソースがバンドルしてあったりするとソースが読めないという問題がある
それはbundleされているのが問題ではなく、bundle前のソースが非公開になっているのが問題なのでは?takker
bundle前のコードが隠されているケースはそうそうないでしょうから、考慮しなくていいと思います
まぁそれを言い始めると、「バンドル前後を偽っていない」という点でソースを信頼することになりますよねyuki_minoh
安全なソースを提示しておいて危険なminified scriptを読み込ませるみたいなことはできてしまうので
どのくらい信頼するのかはコピペ前後であまり変わっていないのでは?
もちろん、利便性その他もろもろの観点でbundleするという視点はありだと思うので、僕からの提案はUserScriptを他人のprojectから読み込むな#61b187596668720000115704ですね~
UserScriptを他人のprojectから読み込むな#61b1b7f86668720000a07879もそうですが、前提としているbundle手法が双方で違ったようですtakker
yuki minohさんは、bundle済みコードも含めて開発者側が提供することを前提に述べている
takkerは利用者が各自でbundleすることを前提に述べていた
お試し用に開発者側がbundle済みコードを添付するケースも含む
なるほどyuki_minoh
UserScript Managerなりscrapbox-bundlerなりでbundleするのが利用者側のベストプラクティスかな
利用者がbundleする場合は、元のソースコードを確認する済むので、bundleの偽造を疑う必要がありません
なお、bundlerに悪意のあるコードが混ざっている可能性は無視しています
webpackやesbuildにevilなコードが混ざったら、すぐ世界中のエンジニアが気づいて修正当てたり警告を出したりするだろう
まぁ規模の違いはあると思いますyuki_minoh
利用者の母数が違いますし、なるべく可読なままで公開しよう、でベストプラクティスな気はする
読むのにもリテラシーと労力がが必要ですし
そこはUserScriptはhelpにもある通り上級者向け機能ですということかなyosider/forum-jp/プロジェクトの削除にもう一段階確認が欲しい#5ff2c3ff97c2910000994ddc
まあその通りなんですが、そこで立ち止まりたくないなぁってお気持ちですyuki_minoh
似た状況は人類は複数回経験してるはず(知見がたまっているはず)なので
もっとUserScriptで便利な思いをしたいし
わかるyosidertakker
僕たちがプログラミングするときに、他人の関与もろもろの中でコーディングをしているのは今にはじまったことではありませんし
なので、既存の手法ではどのように脆弱性などが管理されているのかをこの機会にまとめてみたいですね
へーこんな仕組みがyuki_minoh
これScrapbox上で実装できそうですよね、ある程度
脆弱性報告の簡便な仕組みとかもほしい
現在のimportの方法に問題があるのは事実として、僕としてはより利便性の高いUserScript Managerがほしいなぁと思っています。
ってかなんなら一緒につくりません???w
更新があったときに、どのモジュールにどういうdiffがあったのかとか理解したいし、そのためにも、バンドルしない形式でimportしても利便性を損なわないようにいろいろ揃えたい
たとえば、プロジェクトに移動したら毎回Managerを初期化し、importメソッドをコールする
Managerはbundle前ソースの更新履歴やハッシュを確認
更新があるとき
localStorageにminify & bundleしてキャッシュ
利用者にdiffを提示
更新がないとき
localStorageのminified scriptを読み込む
ほしいyosideryuki_minoh
miyamonzは、全然極端じゃない、妥当な判断だと思います
外のプロジェクトからimportするのは、以下の可能性を将来的に常に把握しないとinjectionが発生します
対象のプロジェクトのメンバーが増える
対象のプロジェクトのメンバーが追加した別のメンバーが別のメンバーを追加する
...
今よくても、将来どうなってるかは未来なので分からない
対象のプロジェクトのメンバーが不正アクセスに合う
対象のプロジェクトのメンバーがevilになってしまう
そもそもevilでない保証はどこにもない
知り合いだろうとなんだろうと
自分がどこからimportしてるのか把握するのは難しい
このへんUserScript Managerの作る意義だなぁと思いますyuki_minoh
diff判定ほしいですねmiyamonz
公式が出してほしくはある
わかるyuki_minoh
ださなそうだなぁとは思ってますけどね
他人が人のUserScriptいじったときにどうなるのか知りたいmiyamonz
たぶんいままで起きたこと無いから分からない
もしかしてすでにそこの防御機能あったりして
たぶんないと思いますtakker
最初から絶対に、自分個人しかいないプロジェクトからしかimportしない、で徹底するのが一番ラクです
UserScriptコピペするときは、必ずすべてのソースコードを読むべきです
となるとbundleが難しい気がするんですが、どう思いますかyuki_minoh
bundle前後の偽装とか
bundleはしない、で現状miyamonzは我慢してます
全部読める範囲のことしかやらない、でとどめてます
自分のコードをgit管理して、scrapboxに埋め込むために自前でbundleするのは良いんじゃないでしょうか?miyamonz
とてもありだと思っていますyuki_minoh
UserScript Managerはバンドルしつつdiff管理もやってくれるような形にしたいなぁと思っています

全部読むべきなので、util的なスクリプトはimportとかモジュールで機能を分けるのではなく、単なる関数として書いて楽にコピペできるようにしたほうが、参考にする側には助かる
なるほどyuki_minoh
今のところscrapbox-userscript-stdはこれの真逆を進んでいるtakker
TS化してるのでコピペで利用不能
JS+JSDoc+@ts-checkで代替できるところもあるが、declare箇所はTS使うしかない
importなしで単独で自立するようなutilコードを用意するのは現実的でない
似たようなコードを何度も書くことになる
保守が大変
多分コピペで管理できる程度の規模のコードを想定していると推測

Reference

UserScript