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