ゲーマー間ではしばしば、ゲーム活動をより便利で快適にするためのツール(特にWebアプリ)が開発されます。
それは音ゲーも例外ではなく、スコア管理ツールや可視化ツール、実力分析やレコメンドツールなど様々なツールが開発され、多くの人に使われてきました。*1
しかし、個人が開発するツールというのは(悪意の有無に関わらず)セキュリティ的に危ない場合もあります。そのため、利用する側は相応のセキュリティリテラシーを身につける必要があります。
ということで。
多くの音ゲーツールで用いられ、そして昨今話題になっている
の概要と危険性、向き合い方について述べます。
音ゲーマー向け・ブックマークレットとは?
スコア管理ツールなど、自身のプレイヤーデータ・楽曲レコードを用いるツールでよく使用されるものです。
例えば以下のような説明を見て実際にやったことがある方も多いと思います。
プレイデータ更新のためにこの文字列をコピーして、ブラウザのブックマークを編集してください。
公式のスコア閲覧サイト上でブックマークを押すことで、サーバーにプレイデータが送信され、ツールが使えるようになります。
大抵、以下のような良くわからない文字列をコピペされますよね。
javascript:(function(){var s=document.createElement("script");s.src="https://exampletool.com/script.js";document.body.appendChild(s);})();
そもそもブックマークレットとは?
ブックマークレットは使用者のブラウザ上で任意のプログラムを即時実行できるシステムです。
みなさんが使用しているChromeやSafariなどといったWebブラウザは、「Webページを表示する」だけでなく「プログラムを実行する」ことができます。
これは現代においては非常によく使われており、「ボタンに役割を付与する」「表示内容をリアルタイムに変化させる」「端末の位置情報を取得する」「外部とデータをやりとりする」などの機能のために利用されています。このブログを見ている時も例外ではありません。
より専門的に言えば、Webブラウザはプログラミング言語であるJavaScriptを実行し、DOM(表示情報)を操作したり、外部と情報を送受信することができます。
通常、プログラムの内容はWebページ作成者が準備したものが勝手に実行されます。
そのため我々はプログラムの存在を意識することなく楽しくWebブラウジングができるわけです。
しかし、自分で作った便利なプログラムをサイト上で実行することもできます。
その時に使われるのがブックマークレットです。
(補足: Webページ作成者がブックマークレット実行を禁止することもできます。詳しくはCSP設定で検索)
音ゲーツールにおけるブックマークレットの活用法
スコア管理ツールを例に話します、
一言で言うと、公式のスコア閲覧サイトからスコア情報を取得し、ツール自体に保存する処理が行われています。
もしスコア収集を人の手で行う場合、
1. 公式のスコア閲覧サイトにログインする
2. ページを移動してレコード一覧画面を開く
3. スコアが表示されている部分までスクロールする
4. スコアを見てExcelにメモする
5. これを繰り返してデータを収集する
6. 一通り終えたらExcelファイルを保存する
という手順で行いますよね。
ブックマークレットを使用すると、2番以降を自動で行うプログラムが実行されます。
2. ページを移動してレコード一覧画面を開く
代わりに、レコード一覧画面にURLで直接アクセスして内容を得る
3. スコアが表示されている部分までスクロールする
代わりに、内容を分析してスコア数値だけ取り出す
4. スコアを見てExcelにメモする
代わりに、一時保存メモリにデータを保存する
5. これを繰り返してデータを収集する
同様に、全データ分繰り返す
6. 一通り終えたらExcelファイルを保存する
代わりに、外部のサーバーに一時保存メモリのデータを送る
危険性について
ブックマークレット=危険?
ブックマークレットの内容次第です。
ブックマークレットはプログラムです。
皆さんが使っているアプリの中にも、安全なものもあれば、コンピュータウイルスのように悪意あるアプリもあるわけです。
なのでブックマークレット自体が危険なのではなく、ブックマークレットの中身次第で便利にも危険にもなり得るのです。
ログインIDやパスワードは盗めるのか?
ログイン後に実行するタイプであることが前提ですが*2、基本的には盗めません。
特にパスワードに関しては、ブックマークレットを用いて盗むことが事実上不可能です。
ご安心ください。いややっぱ安心しないでください。慢心は禁物です。
重要なので詳しく解説します。
ログインが必要なサービスを使用中、常に「ログインID&パスワード」を使用しているわけではありません。
ログインIDとパスワードを使用する場面は、「ログイン画面に入力して送信する」この時だけです。
パスワードがブラウザに保持されていないため、ブックマークレットでの取得は当然不可能です。
ではどうやってログイン認証が行われているか。
ログインした瞬間、ユーザーには「セッションID」と呼ばれるデータが配られます。これは一時通行証のようなもので、ログイン状態でページを推移する度にこの通行証を見せています。
サーバー側では一時通行証の存在を確認して「この人は通行証を持っているし、この人に通行証を渡した記録もある。だからログイン中で間違いない、個人情報を渡しても問題ない」という判断を行います。
世の中のサービスは、このような仕組みでログイン認証が行われているのです。
イメージだとテーマパークの再入場の仕組みが近いんじゃないでしょうか。
再入場用出場口で、手に不可視なスタンプを押されますよね。再入場時にはそのスタンプを確認してゲートを通ることができます。このスタンプがセッションIDです。
再入場時に購入チケットの情報とか本人確認書類は不要ですよね。これらの情報がログインIDやパスワードに相当します。
テーマパークあんま行くことないから全然違ったらすみません。
ちなみに一時通行証ことセッションIDを保存している領域こそが、みなさんご存知「Cookie」です。
CookieにはセッションID以外にも認証関連のデータが保存され、ページアクセスの度にサーバー側に提示されます。
また、セッションIDには安全のために有効期限が設定されていることもあります。「セッションタイムアウト」「接続時間が切れました」という文言を見かけたら、それはセッションIDの有効期限切れを表します(再度パスワードを送る必要がある)。
じゃあ次は、このセッションIDを盗まれたらやばいのでは?という話になります。
実際盗めた場合はやばくて、このセッションIDを用いてCookieを偽装すれば、パスワードどころかログインIDすら不要でログインできてしまいます。
でもご安心を。ちゃんとしたサイトならブックマークレットでセッションIDを取得することはできません。
セッションIDは特別で、ブックマークレットはじめとするJavaScriptプログラムからの取得を禁止する設定がされています。(詳しくはHttpOnlyで検索)
よって、基本的にはログインIDやパスワードなどの認証情報をブックマークレットで盗むことはできません。
でも油断するな
ここまでは理想の話です。
Cookieには用途に合わせてセッションID以外の認証情報が保存されることがあります。
ごく稀にログインIDをそのままCookieに保存している場合があり、これはブックマークレットで取得できてしまいます。
ただしこれは良くないことで、避けるべきことです。保存する意図として例えば「ログイン時のID入力を不要にする(ログインIDを保存する・自動入力する)」機能に使用したいからというのがありますが、より安全な方法で上記の自動入力機能を実装することもできます。
つまり、出来が悪いサイトではブックマークレットで取得できる範囲に大事な情報が保存される可能性があるということです。
そして、このような動作をするサイトは普通にあります。恐ろしいですね。聞いてるかゲ◯チ◯ウマ◯NET、お前のことやぞ。

一番上がセッションIDで、しっかりとHttpOnlyになっている
ログインID(一番下)とフレンドコードリストはどうして必要なんですか?
(補足: 音ゲーのスコア閲覧ツールは基本的にスコア閲覧しかできないので問題になることはないですが、アカウント情報の閲覧・変更ページがあるサービスであればメールアドレスなどが盗まれるかもしれません。)
結局、どういうことに気をつければいいの?
信頼できるプログラムのみ使用する
……まあそりゃそうって感じですよね
でも、正直信頼できるかどうかなんて素人にはわかりません。
それ故にブックマークレットの実行は完全に自己責任です。
(ここから割とお気持ちかもしれんすまん)
詳しい人にブックマークレットを解析してもらうというのも手でしょう。ブックマークレットは公開プログラムですし*3。また、最近はChatGPTなどがありますから、そやつらにセキュリティ上のリスク分析をお願いすることもできます。
しかしサービスによっては人間が読みにくいように難読化されていることもあります。
難読化自体は不正アクセスや盗用・悪用防止のために普通に行われることなのです。しかし、それは安全性が高い傾向にある企業がやるから良いのであり、個人制作物で行うのは"隠している"ように見え、セキュリティ的に大丈夫か?となってしまいます。(しかも利用規約でリバースエンジニアリングが禁止されていることもある)
でも怒らないであげてください。ソースコードをそのまま公開してしまうと逆に悪用される危険があるため、難読化したい気持ちはとてもわかります。最高難易度の曲のスコアを1145141919810点にしたデータがサーバーに送信されたりとか。
だからこそ
開発者は、信頼できるプログラムであることを証明する必要があると思います。
具体的には、「処理内容の透明化」をするべきでしょう。どういうことが行われ、どういうデータを取得しているか。ブックマークレットを用いたツールを開発する人々は、これを自身のツールページに記載すべきだと思います。
使用者と開発者がお互いに信頼し合い、よりゲーム生活を盛り上げられるような環境にしていきましょう。
※公式のスコア閲覧サイト上でのブックマークレット使用は、スコア閲覧サイトの利用規約的にかなりグレーな行為です。最終的にプレイヤーが活発になる良い使い方だからこそ黙認していただいております。間違っても迷惑になる使い方をしないように、そして公式に「これいいんですか」などと問い合わせないように。































