Hatena::ブログ(Diary)

文殊堂 このページをアンテナに追加 RSSフィード

2011-04-11

githubで複数ユーザを使い分ける

githubというかgitosisはsshの鍵でユーザを判定します。

設定の仕方はhelpでも見てくだしあ

Set Up Git · GitHub Help

Set Up Git · GitHub Help

Set Up Git · GitHub Help

自分のgithubユーザとして色んなマシンからgithubを使う場合は簡単です。

上記の説明のとおりに公開鍵を追加していけばいいだけです。


で、同じマシンの同じユーザアカウントで、

複数のgithubユーザとしてgithubを使うのはどうすればいいかというと、

ホストのエイリアスを設定して別の秘密鍵を設定してやれば大丈夫です。

入門OpenSSH / 第4章 OpenSSH を使う

↓の例は複数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

アイコンについて

githubgithub.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

id:voluntas

Comet on Mochiweb

Erlang
  • サーバ/データベースを書く為の言語
  • 軽量プロセスを大量に作成可能
  • 関数型というがかなり独特、しいていうならErlang型言語
  • 言語自体の学習コストは低い
    • フレームワークがついてくるがそっちの学習コストが高い
  • 軽量プロセス間通信が簡単
  • フレームワークで状態遷移を管理出来る
  • スケーラビリティが超高い
Mochiweb
  • Erlangで書かれたWebサーバ
  • Facebookのチャットに使われている
  • Webサーバというより、好きなWebサーバを作る為のWebサーバフレームワーク
  • 作者はMochiKitと一緒
Comet
  • 擬似的にサーバがプッシュ
  • 通常のWebサーバでは実現出来ない
  • クライアントが送ってきたリクエストを保留する
  • Last.fmの事例としてはC1000KというかC1Mまで行けたとか
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について

2008/08/27追記

John Resigのprofile用plugin使った方がいいんじゃね?

no title

せつめー

$(selector)の呼び出しのセレクタごとの呼び出し回数と時間を計測して、consoleに出力してくれる。

使い方

  1. jquery.profile.jsを読み込んでやる。
  2. $.profile.start();
  3. $(selector)を呼び出しまくる
  4. $.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>

上記のタグを挿入してテスト結果が変わらないことを確認、

GitHubアカウントを取得、

jQuery Profile pluginのプロジェクトをfork、

修正したコードをcommit。

こんな感じか?