OAuth の用語は解りにくいので、まず前提条件として表現を変えます。 1) Consumer key : アプリケーションID 2) Consumer secret : アプリケーションパスワード 1) Access Token : アクセスID 2) Access Token Secret : アクセスパスワード さらに、通常の投稿をするには手順中の一時的なトークンがありますが、呼び出し URL が api.twitter.com/oauth/request_token なので以下のような呼び名にします 1) Token : リクエストID 2) Token Secret : リクエストパスワード最初の呼び出し 呼び出すAPI : https://api.twitter.com/oauth/request_token 必要な情報 1) コールバック URL 2) アプリケーションID 3) ランダムな文字列 4) "HMAC-SHA1" 5) Unix タイムスタンプ 6) "1.0" これらのデータを含む文字列を HMAC-SHA1 で、アプリケーションパスワードを使って signature 文字列を作成します。そして、http ヘッダーに signature 文字列 を含む他の情報をセットして呼び出します。( POST データとして送る事もできるはずです ) 向こう側では、その送られたデータを、向こう側で保存されている アプリケーションパスワードで、HMAC-SHA1 を使って signature 文字列を作成し、送られて来たsignature 文字列と一致するかどうかを確かめます。一致すれば リクエストID と リクエストパスワードを送り返します。 Twitter サイトでの承認 https://twitter.com/oauth/authorize?oauth_token=リクエストID でアクセスします。WEBアプリケーションからスムーズに移行するには、リダイレクトしますが、デスクトップアプリケーションの場合は、ここだけはブラウザを使用する事になります。 この結果、Twitter にログインしていない場合は、大元のユーザ ID とパスワードを入力しますが、ログイン済の場合は、承認のみ行う事になります。この結果、WEBアプリケーションでは、コールバック URL に対して、oauth_verifier が戻される事になります。これは、デスクトップアプリケーションにおけれ PIN にあたりますが、要するに「ワンタイムパスワード( 本人確認の手順の一部 )」です。 アクセスIDとアクセスパスワードを取得 これでやっと、ユーザIDとパスワードの代替えである、アクセスの委譲を行う為のアクセスIDとアクセスパスワードを取得する事ができます。 呼び出すAPI : https://api.twitter.com/oauth/access_token 必要な情報 1) アプリケーションID 2) ランダムな文字列 3) "HMAC-SHA1" 4) Unix タイムスタンプ 5) リクエストID 6) ワンタイムパスワード 7) "1.0" このデータの送信で使われるパスワードは、アプリケーションパスワード に加えてリクエストパスワード です。両方を使って signature 文字列を作成して API に対て http ヘッダーを通して情報を送ります。今回だけのリクエスト ID と今回だけのワンタイムパスワードを含む文字列を秘密のパスワードを二つ使って署名します。 このデータは、一連の手順を経ないと得られないものであり、かつ、サーバのみ一致するかどうかを確認できます。 この結果得られるのが、アクセスID と アクセスパスワードであり、必要であればこのデータをセッションやファイルやデータベースに保存しておくと、認証の必要無く API にアクセスできる事になります。 このアクセスID と アクセスパスワードは有効期限の無いセッションのようなもので、ずっとPCを切らないで、ブラウザを閉じないようなものです。但し、キャンセルする方法として、ユーザの「連携アプリ」として登録されている該当のアプリを削除(許可を取り消す)するとキャンセルされます。( 次に使う時は再度承認する事になります ) そうする事によって、このアクセスID と アクセスパスワードはリセットされ、以前とは違うものになります
|
2010年05月31日
TwitterAPI : OAuth の手順と受け渡しするデータの意味
2010年05月28日
PHP と MySQL 限定で SQL インジェクションを考えた場合
SQLインジェクションの要点は、'と' の間に現れる文字列をどうするか、と言う事に集約されます。その文字列表現になにも問題無ければ、いかなる文字列も '(シングルクオート)にはさまれた文字列でしか無いはずだからです。 そもそも PHP を扱う場合、もともとWEBアプリケーションで使う事を想定されているので、入力文字がプログラマの意図せぬ変換されている場合があります。ですから、SQLインジェクションを考える場合はこれを排除して考える必要があります。 つまり、最初は「入力されたままの文字列がアプリケーションに渡される」という前提で考えます。その場合最初に気をつけるのが '(シングルクオート) です。 入力値の'(シングルクオート) は、SQLの常識としてそのままでは正しく動かないので、'' に変換します。通常はこれで十分なわけですが、MySQL という RDBMS を扱う上でさらに注意が必要になります。
$query = "select * from 社員マスタ"; $query .= " where 社員コード = '{$_POST['fld1']}'"; //入力値が ' or 1=1# だと、 // select * from 社員マスタ where 社員コード = '' or 1=1#' となり、 // 全件表示されてしまうので // '' or 1=1# と変換すると入力値はすべて文字列となります
これはこれで OK なのですが、\' or 1=1# と入力されてしまうと、\'' or 1=1# と変換されて、\' が '' 扱いになって、結局 以下のようになって全て選択されます( '' の間の \' は、文字列扱いの ' になるので、文字列の終端が変化してしまう )
select * from 社員マスタ where 社員コード = '\'' or 1=1#'
で、それらをふまえた上で、PHP には、MySQL のドキュメントにも出現する API である、mysql_real_escape_string という関数を使うと、一括で危険な文字を変換できます。 MySQL ドキュメント MySQL :: MySQL 5.1 リファレンスマニュアル :: 23.2.3.53 mysql_real_escape_string()
2010年05月26日
本心
ほんとうに良くある構図ですが、パレットプラグインの薄い色使いをテストして、髪の毛の光沢を出したかったのですが、薄い色と濃い色との融合って凄く難しい事が解りました。 しかし、時間がかかりますね。色にこだわると。
2010年05月23日
自分が作ったWEBアプリから画像データを登録する手段
API で外部サービス画像はデータ量がかさばるので、さすがに自分の WEB スペースでは一時的にしか保存する 事はできません。しかし、最近では無料で画像を保存させてくれるサービスがあるので、 API を使って利用する為にサンプルを作成しました。Twitpicこのサービスの存在は最近まで知らなかったのですが、Twitter を眺めていて、車が盗難 されたうんぬん・・・という文章が流れて来て、見てみるとリンク先が Twitpic で、トラ ックの画像が掲載されていました。 「へえ・・・こんなのがあるのか。しかも API あるし」 と、言う事でテスト。API には v1 と v2 があったのですが、v1 はすぐ動きました。v2 は、仕様の文章があいまいな部分があったので、実装するのに結構時間がかかりましたが、 おかげで、本家 Twitter の API の内容もあわせて良く理解する事ができました。 しかし、いくら英語だからと言っても、少なくとも「仕様」というにはあまりに説明不足 な文書が多いと思います。自分自身も技術者だから良く解るのですが、「自分は解ってる」 とう前提で書くと、他人には伝わらない事が多いですね :-) ほんと、その上言語の壁があると、どんどん遅れて行くのでとてもつらいです。 ま、グチはさておいて。必要なもの
PHP + Twitpic API v2 で、ファイルをアップロード 当然、ある程度の知識が無いと意味は解りづらいものではありますが、4つのデータを用意 すればだれでも使えるはずです。1) Twitpic のAPIキー 2) Twitter の Consumer key 3) Twitter の Consumer secret 4) Twitter の Access Token 5) Twitter の Access Token Secret アクセストークンは アプリケーションに割り当てられた My Access Token を参照して取得して下さいPicasaこの API の v2 では、Twitpic には、2〜5を直接は渡しません。 Twitpicでアカウントが存在するかどうかをチェックする為の Twitter の API を使う のに必要な最低限のデータを渡します。 とても安心です。API の v1 は直接渡すのでおすすめできませんね。
これは、言わずと知れた Google のサービスです。いろいろな言語でライブラリが 存在するので、それらを使う事が推奨されます。Twitter のような元となるデータ の引き渡し方の仕様はいろいろ探したのですが、明確なものを見つけられませんで したので、素直にライブラリまたはフレームワークを使うべし、という結論です。 自分は、PHP で処理したかったので、Zend Framework を使いましたが、例によって クラス化されているわりにドキュメントが貧弱なのでサンプルコードを元に手順が 理解しやすいようにしました。それにしてもこのサンプル(Photos.php)作った人、 そうとうやっつけ仕事をやってます。きっと相当忙しい人なんでしょうね でも、何故かオンラインマニュアルは丁寧です。 Zend Framework: Documentation: Picasa Web Albums の使用法
PHP : Zend Gdata による Picasa アップロード
2010年05月21日
PHP で 3種類 JavaScript で2種類、Framework や Python や、微妙に違う URLEncode
Twitter API の OAuth の処理を行う為に、できるだけ簡単にコピーペーストして使えるようなコードサンプルを作ろうとしていたのですが、そこで、URLEncodeと一口に言っても、何かしたい時には確認が必要だと言うのが良く判りました。 関連する記事 PHP : Twitter API 認証 : Access Token を取得する で、いろいろ取り出して比較してみました。
PHP/JavaScript/ASP/ps/py : 処理別の urlencode の結果の違い
2010年05月13日
Oracle11g + Windows7 : InstantClient を使用した軽量接続 ( Win32 )

Oracle 11g : Instant Client を使用した接続( Win32 )
10g の時は Visual Studio 2003 で作成されていたらしく、Microsoft の dll を手にいれるのに苦労したというか、その dll が無い事が原因でエラーが出 る事を調べるの手間取りましたが、今回はあっさりです。 但し、まだ日本語の説明が無いようなので、環境変数にキャラクタセットの 設定をしないと化けます。これは、10g のころの説明にあっもので、化けた のですぐ設定しましたが、前回の経験が無いとまた、手間を取るところでした。
2010年05月05日
Windows7で、コマンドプロンプトからDVDを焼く
Windows7 + CreateCD でコマンドラインからDVD に書き込み ハードディスクも大容量になり、仮想 PC の 差分ディスクなんかは、DVD でもサイズが追いつかないので、ポータブル HDD が必要になってきますが、とにかく媒体は安いし、ソースコードやソフトウェアの保存ならば十分ですし、手軽に使いましょう。一枚30円もしないとおもいますし。 エクスプローラから書きこむのもいいですが、開発で定常的に使うのならば、いちいちバックアップ元を指定してられないので、バッチファイルで一発で書きこみたいと思うはずです。XP の時代だと、フレームワークは必要だし、パッチも必要で面倒でしたが、Windows7 だとダウンロードしてきたらすぐ使えます。 そういう意味では、XP モードの XP には Framework と パッチが必要なのですけれど。
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。 Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。 また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。 ※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです 対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。※ エキスパートモードで表示しています アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります
<% if:page_name eq 'archive' -%> アーカイブページでのみ表示される内容 <% /if %> <% if:page_name eq 'category' -%> カテゴリページでのみ表示される内容 <% /if %> <% if:page_name eq 'tag' -%> タグページでのみ表示される内容 <% /if %>この記述は、以下の場所で使用します![]()
|