hack のためのネタ帳, etc,,,

記録結果を web に貼り付けて再生可能な ttyrec って感じ?
ネタ元: 2016-07-24

参考:

公式ページ等

1年以上も前に見かけて失念してたんだが、以下の記事で、見かけたのでざっと一通り使ってみた。

asciinema の判別とか、情報漏洩対策とか

これ、何も指定せずに asciinema rec とかすると記録始めて Ctrl-D で終了するとアップロードしていいか?って聞かれて ENTER でアップロードされる。
迂闊にやると情報漏えいしそう。
とりあえず PS1 は変えておいたほうが良い気がするので、.bashrc に asciinema 上で作業しているかどうか判別して PS1 を変更するように設定したかったのだが、cygwin のリポジトリに入ってた asciinema 1.4.0 だと、環境変数とか眺めても asciinema 上かどうか判別するため使えそうな情報が見つからなかった。ps コマンド等の結果を加工して判別するしか無さそうだけど、地味に面倒。

upload と API token

upload された asciicast は初期状態では private になっている。
初回の利用で、 自動的に API token が生成され、誰とも紐付いてない状態の profile が生成され、見た目上の username は手元端末にログインしているユーザー名となる。
その後、asciinema auth すると https://asciinema.org/connect/API-TOKEN が示され、これを開くと email アドレスの入力画面になりメアドとのひも付けが行われる。

メアドとのひも付けが行われる以前の profile は https://asciinema.org/u/SERIAL となるが(SERIAL は多分連番で10進数)、メアドが紐付けると新たに profile が https://asciinema.org/~USERNAME が生成され、元の profile は消えると共に、profile に紐付いていた asciicasts は新たな profile の下に移動する。
アカウントに紐付いている API token は profile の setting のところで確認できる。

ローカルでの API token の保存場所と形式は以下に情報があった。 場所は v1 と v2 で異なっており以下の通り。
  • v1 は ~/.config/asciinema/config または ~/.asciinema/config
  • v2 は ~/.config/asciinema/install-id または ~/.asciinema/install-id
形式は、ランダム生成した UUID v4 らしい。

従って、email アドレスとひも付ける前にこの API token を失ってしまうと、upload 済みの asciicast を消す手段がなくなる。
また、アカウントとのひも付け前に API token が漏れてしまうと、upload 済みの private cast を奪われてしまう可能性がある。

API token がユーザーに紐付いている状態で、別のユーザーが紐付けしようとすると以下のように表示されるため、複数ユーザーへのひも付けは出来ない模様。
This recorder token belongs to a different user.

API token はランダム生成なので自分で適当に生成した UUID でもひも付け可能だった。
API token の register/revoke は日時が記録に残る。これは消せないので、ひも付けが多いと邪魔かも。

API token の revoke

API token の revoke はひも付けではなく API token 自体が revoke される。
このため、再度ひも付けしようとすると
This token has been revoked.
と出て紐付けは出来ない。

また、revoke した API token で upload しようとすると、以下のように表示されて upload に失敗するた。
~ Upload failed: Invalid or revoked recorder token
~ Retry later by running: asciinema upload /tmp/tmpRANDOM8CHAR-asciinema.json
revoke 済みの API token は使用できないので新たに生成してアカウントにひも付けする必要がある。
逆に言えば、間違って upload するのを防ぎたい場合は revoke 済みの API token を設定ファイルにわざと設定しておくという方法が取れる。

Log in とメアド

Log in は登録したメアドに毎回 one-time login link が送られてきてそれをクリックせよとのこと。
つまり、何らかの事情でメアドを失うと、二度とログインできなくなはず。

ひも付けたメアドは Log in している状態にある限り何の制限も確認もなく自由に変更可能だった。
唯一、他のユーザーが既に登録済みのメアドに変更する場合を除いては。

ただし、一旦 Log out してしまうと、確認用の Email に書かれた one-time login link をクリックする以外に Log in する手段がないため、ミススペル等があるとアクセス手段を失うい兼ねない。
メアドの変更はくれぐれも慎重に。

しかし、これはそもそも Email を受信できないと Log in 出来ないんだから、変更の際には、変更前と変更後のメアド両方に変更承認用の one-time login link を送って、両方揃ったことを条件に変更を実行するべきだろう。
フールプルーフがなってない。

この仕様はソーシャルハックの口実に使われそうだし、ソーシャルハック出来ないなら、メアドの喪失でアカウントも永久に喪失しそうなのでちょっと怖い。
また、紐付いているメアド奪われると、asciinema のアカウントも奪われる可能性があるのだが、ひも付けているメアドを変更された場合、奪還は極めて困難かもしれない。

Username と profile

Username 周りは大きな実害はないものの地味にバグっている。

Username は自由に変更出来るんだけど、既存ユーザーとの重複をチェックをしてないらしく、別の人が取得済みの Username を設定できてしまう。
Username が重複した場合 profile のページは https://asciinema.org/~USERNAME であるから、自分の profile を表示しようとしても、先に Username を取得したユーザーの profile が表示される。
あくまでも先に Username を取得したユーザーの profile であるため、private asciicast は一覧には表示されない。
もちろん public な asciicast は一覧表示されるが private/public の切り替えや edit, delete 等は出来なかった。
つまり、セッションキーのアカウント識別はメアド側に紐付いているということのようである。
このため、先に Username を取得したユーザー側にはほぼ問題は生じない。
ただし、Log in が Username または Email で行えるようになっているため、Username が重複取得されている場合、Username による Log in は「Internal server error」となり失敗するという問題は生じる。

とりあえず Username で Log in しようとして「Internal server error」と表示されたら、おそらく他のユーザーが Username を重複登録しているはずなので、Email で Log in しよう。

なお、Username を登録していない場合は、Username は空白で profile におけるユーザー名は「user:SERIAL」のようになると共に、profile は https://asciinema.org/u/SERIAL となる。

asciicast の公開

asciicast の公開については private と public のそれぞれにユニークで永続的な URL が決まっている。
private/public の切り替えで public 用の URL が ON/OFF されるため private/public 用の URL を切り替えて使う事になる。
つまり public 用の URL は asciicast を private に設定し直すと 404 Not Found になりアクセスできなくなる。
一方 private 用の URL は常に有効なので URL を知ってさえいれば誰でもアクセス出来る。
URL を変更する手段はないようなので、万が一 private 用の URL を流出させてしまった場合は、asciicast 自体を一旦削除して upload し直すと良いだろう。


関連

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます