2011-04-11
githubで複数ユーザを使い分ける
githubというかgitosisはsshの鍵でユーザを判定します。
設定の仕方はhelpでも見てくだしあ。
自分のgithubユーザとして色んなマシンからgithubを使う場合は簡単です。
上記の説明のとおりに公開鍵を追加していけばいいだけです。
で、同じマシンの同じユーザアカウントで、
複数のgithubユーザとしてgithubを使うのはどうすればいいかというと、
ホストのエイリアスを設定して別の秘密鍵を設定してやれば大丈夫です。
↓の例は複数HostNameへのSSH接続の管理ですが、
~/.ssh/config で簡単に複数ホストへのSSH接続を管理する - すぱぶろ
同一HostNameで別Hostというふうにも出来るのでそれを使います。
元々のgithubユーザで使っていた秘密鍵をid_rsaとして、
別のgithubユーザで使う秘密鍵をid_rsa.anotherとしたら、
~/.ssh/config に以下のように記述します。
# monjudoh Host gist.github.com HostName gist.github.com User git IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes # another Host gist.github.com-another HostName gist.github.com User git IdentityFile ~/.ssh/id_rsa.another IdentitiesOnly yes Host github.com-another HostName github.com User git IdentityFile ~/.ssh/id_rsa.another IdentitiesOnly yes
git@github.com:another/hoge.git をcloneしてきたい場合、
以下のようにすれば、anotherユーザとしてcloneしてくることが出来ます。
git clone git@github.com-another:another/hoge.git
アイコンについて
githubはgithub.tokenとuser.emailの設定によって
changesetにどのアイコンを出すか決めているようなので、
git config --local user.email
で、別のメールアドレスを設定しておきましょう。
これをやらないとお客さんも見るリポジトリに二次元キャラアイコンが並ぶなどという事故が起こる可能性があります。
それで別に問題がないなどという可能性もあります。
2010-09-22
昨日騒ぎになったTwitterのXSS脆弱性によって実際に受けそうな被害とその対策
何が出来るのか
どんな脆弱性かの詳細はこちらを参照2010 年 9 月 21 日現在のツイッターのバグ(脆弱性)について
外部JavaScriptを読み込むコードを仕込めたので、
どんなJavaScriptでも実行できる状態でした。
以下、JavaScriptの実行によってTwitter上で出来る事。
セッションハイジャック
JavaScriptからcookieを参照できるのでログイン状態のセッションIDも参照できます。
また、任意のJavaScriptが実行できる以上、参照したセッションIDを攻撃者のサーバ等に送信することも出来ます。
攻撃者は奪ったセッションIDをcookieに設定すれば、被害者のアカウントでtweet,direct messageの閲覧・送信が出来ます。
確認してみたところ、ログイン状態のセッションIDはログアウトしても無効にはなりません。
設定→パスワードからパスワード変更操作をすれば(変更前後のパスワードが同一でも)以前のセッションIDを無効にできます。
セッションハイジャックで出来る事・出来無い事
本来のユーザがログインしている状態と同じなので大抵のことは出来ますが、以下のことは出来ません。
ブラウザにパスワードを覚えさせている場合のパスワード奪取の可能性
ブラウザにパスワードを覚えさせている場合、JavaScriptで偽のログインフォームを作成し、
usernameに現在ログインしているユーザ名=いつもログインしているユーザ名を入れ、
ブラウザに入力させたパスワードを取得するということができそうです。
ただ、最近のブラウザの場合、最初からHTMLに含まれているformについてのみパスワード入力補完の対象になるようで、
JavaScriptで動的に作成したフォームにはパスワードを入れないようです。
Firefox3.6,Google Chrome6,Safari5については大丈夫なのを確認しました。
また、IE6はダメ(JavaScriptで動的に作成したフォームにはブラウザが覚えているパスワードが入ってしまう)なことも確認しました。
http://twitter.com/ の右上のログインフォームからログインしてパスワードを覚えさせている状態で、
以下をアドレスバーに貼りつけて実行し、一番下に表示されたログインフォームにユーザ名を入れて、
パスワードが自動入力されなければOKです。
javascript:$('<form method="post" action="https://twitter.com/sessions" id="signin"><input name="session[username_or_email]" id="username" type="text"><input name="session[password]" id="password" type="password"><input id="signin_submit" type="submit"></form>').appendTo('body');void(0);
今からやっておくといい対策
セッションハイジャックされてたらログアウトしても無駄なので、
同じパスワードでいい=実際には変更しなくていいのでパスワード変更操作をしておく。
IE6等パスワード奪取の可能性があるブラウザで踏んでしまった場合は、
ちゃんとパスワードを違うものに変更しておく。
2009-03-02
.何某ファイルを管理対象から除外する
リポジトリのトップがどれかのアカウントでのhomeだった場合には、
.bashrcとかいった.何某ファイルが大量にあって、
そういったファイルをhg cloneとかで一緒に持って行きたくないものです。
Mercurialでファイルを管理対象から除外するには.hgignoreに記述すればいいわけですが、
.hgignoreは管理対象から除外したくないです。
そういう場合はsyntax: globで普通に除外したいファイルを指定していった後で、
以下の設定の最後の2行を追加すればOK。
syntax: glob *.pyc *.swp *.org *.orig *.bak *.bk *~ syntax: regexp ^\.(?!hgignore)[^/]+
普通に拡張子やディレクトリで除外対象を指定したい場合はsyntax: globの方が楽だけど、
除外対象から除外したいものがある場合はsyntax: regexpの方が楽だよねという話。
2009-02-13
BP Study#18 Comet on MochiwebとGoogle App Engine
Comet on Mochiweb
Erlang
- サーバ/データベースを書く為の言語
- 軽量プロセスを大量に作成可能
- 関数型というがかなり独特、しいていうならErlang型言語
- 言語自体の学習コストは低い
- フレームワークがついてくるがそっちの学習コストが高い
- 軽量プロセス間通信が簡単
- フレームワークで状態遷移を管理出来る
- スケーラビリティが超高い
Mochiweb
Comet
Cometの可能性
- サーバがクライアントへプッシュ出来る
- 使い道は意外にないかもしれない
- Lingrくらいしか有名なのない
- 概念はとても面白い
Google App Engine
- ボタン一つでデプロイ出来るのがキモ
ロードマップ
- タスクスケジューラ、タスクキュー追加
- メールの受信、編集可
- App Engineでメールアカウントを持って、そこにメールが来ると受信出来る
- XMPP
- GoogleTalkで使うプロトコル
Google Solutions Marketplace
- Google Appsへ簡単に登録出来る
- 将来的にはGoogle App Engineでアプリを作ってApplication Idによる販売が可能
2008-08-26
jQuery Profile pluginについて
JavaScript, jQuery, jQuery plugin
2008/08/27追記
John Resigのprofile用plugin使った方がいいんじゃね?
せつめー
$(selector)の呼び出しのセレクタごとの呼び出し回数と時間を計測して、consoleに出力してくれる。
使い方
- jquery.profile.jsを読み込んでやる。
- $.profile.start();
- $(selector)を呼び出しまくる
- $.profile.done();
とやればstartからdoneの間の$(selector)の呼び出しのセレクタごとの呼び出し回数と時間が、consoleに出力される。
問題
$.profile.start();実行後にjQueryUIが使えなくなる。
他にも使えなくなるpluginはあるんじゃないかなー。
$.profile.startを調べる
コードを読んでみると、コンストラクタであるjQuery.fn.initを無名関数内のローカル変数として保持して、
ラップした関数に差し替えるだけの簡単なお仕事のようです。
jquery.profile.js内でjQuery.fn.initを呼んでいる箇所を見てみる。
result = savedInit.call(jQuery.fn, selector, context),// 91行目 /*中略*/ return result;// 108行目
同じくjquery-1.2.6.js内でjQuery.fn.initを呼んでいる箇所。
return new jQuery.fn.init( selector, context );// 20行目
メソッド呼び出してはなくコンストラクタとしての呼び出しなので、jquery.profile.jsと違う。
jQuery.fn.initについて調べると以下のような記述が…
jQuery.fn.init.prototype = jQuery.fn;// 529行目
実際のインスタンスのprototypeを見てみる
$('div').__proto__;//Object jquery=1.2.6 length=… $('div').__proto__ == jQuery.fn;//true; $.profile.start(); $('div').__proto__;//Object $('div').__proto__ == jQuery.fn;//false; $.profile.done(); $('div').__proto__;//Object jquery=1.2.6 length=… $('div').__proto__ == jQuery.fn;//true;
当たり前だが$.profile.start();すると、
jQueryオブジェクトのprototypeがjQuery.fnではなくObjectになってしまう。
jquery.profile.jsを修正する
先ほどの91行目をこうした。
result = new savedInit( selector, context),// 91行目
直ったっぽい。
とりあえずjQueryUI同梱のFunctional Demosは概ね動く感じになった。
今後やるべきこと?
各種テストのHTMLのjQueryを読み込んでいる直後の箇所に
<script type="text/javascript" src="jquery.profile.js"></script> <script type="text/javascript"> $.profile.start(); </script>
上記のタグを挿入してテスト結果が変わらないことを確認、
jQuery Profile pluginのプロジェクトをfork、
修正したコードをcommit。
こんな感じか?
