忍者ブログ
[98]  [97]  [96]  [95]  [94]  [93]  [92]  [91]  [90]  [89]  [88
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

とりあえず、「PHPでサクサクサク~ッとCGIを作ってやろう」と思ったってところから始まった。
「やるからには画面部分はAS3(swf)で書く」と決めた。

で、大量のデータを条件で検索したりする場合、DBを使うと良い、って事を知った。
ていうか、普通ですね。

最初にさわったDBはPHPに標準で付いてるSQLite。XAMPP入れたからMySQLもあったんだけど、まあ、なにせ初めてだからね。まずはPHPだけで何とかしようとしたんだと思う。
SQLiteは、何ていうか、かわいかったなあ。カラムに型が、実質無いってのはやりやすかった。
でも、駄目だった。何でだったかなあ、思い出せないけど、AS側から上手く使えなかった。
で、結局MySQLを勉強し始めた。

つーか、そもそも「ASからSQLをどのように利用するか」っていう前提部分が、マズかったんだなあ。

僕がやろうとしたのは、「ASからPOSTされたSQL文をPHP側で直接処理させる」って方法。
早い段階で薄々「よろしくねえなあ」とは思いつつも、やらずには居られなかった。
ただ淡々とSQLを実行するPHPだけ書いてやれば、あとはASだけでやりたい放題になる訳だからね。

でも当然このPHPは、そのままだと誰からSQL文をPOSTされても従順に実行してしまうわけだ。
実にイクナイ。
動いてもいないプログラムのセキュリティなんぞ気にしても仕方ないはずなんだけど、そこで見事に手段と目的がすり替わった。
つまり、この問題をいかに解決するかが当面の目標となった。

SQLを処理するPHPにおいて認証しなければならないのはリクエスト主が、「僕が書いたASプログラムであること」と、「PHPと同一の管理人のSWFであること」だ。
(完成する見込みもないプログラムの配布後の事まで想定しているのは、これはつまり手段の目的化によるものである。)

で、以下の手順を取った。
  1. サーバはクライアントからリクエストがあると、まずランダムな文字列(チケットA)を発行する。
  2. そして発行したチケットAと管理者が設定した文字列(鍵X)を連結し、不可逆関数でハッシュ(チケットB)を求める。
  3. チケットBをランダムに生成した文字列(鍵Y)と連結し、更にそのハッシュ(チケットC)を求め、チケットCと鍵Yを対にしてログファイルに記録する。(チケットCは鍵Yによって暗号化されてると言えるが、この1対があってもチケットBを求めることは出来ない。)
  4. 一方クライアント側は、チケットAと鍵XからチケットBを求める事ができるので、SQL文と一緒にこのチケットBもPOSTする。
  5. CGI側では受け取ったチケットBと鍵Yによって求めたハッシュがチケットCと等しいかどうかによって、正しいクライアントからのPOSTかどうかを確認出来る。
てなあ具合。文字で書くとわかりにくいなあ。記号を使って説明すると。。。
  1. 文字列sのハッシュはハッシュ関数HによってH(s)と表現され、またH(s)の値からsを求める事は出来ない。
  2. 演算子#は左右のオペランドに文字列をとり、その演算結果について、A≠B のとき必ず C#A≠C#B が成り立つ。
  3. クライアントとサーバはともに関数Hと文字列Xを知っている。
  4. サーバは関数Gと文字列Yを知っている。Yは毎回ランダムに生成される。
  5. サーバはランダムに生成した文字列Aをクライアントに渡し、更に ( G( H( A#X )#Y ), Y ) の値の組を記録する。
  6. クライアントは受け取ったAと既知のH, Xから H( A#X ) を求めてサーバに返す。
  7. サーバはクライアントから受け取った値 B について G( B#Y ) を計算し、記録した値との比較からクライアントの認証を行う。
だめだ、余計アレになってる。

まあ、そんなこんなでPHPに直接SQL文をPOSTしてもどうやら大丈夫そう、っていうところまで来た。
あとはMySQLのTABLEをAS3でラップしたりして(どうやらO/Rマッピングっていうらしい)、そうしたらやりたい放題だと、そんな風に考えていた時期もありました。

えーと、反省文続く。


PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
無題
レスポンスをどう受け取るのかとか考えると、ふつうSQLを発行するのは、PHP側だろういうのは、野暮なのかな。
SSLはこの場合使えるのだろうか?やったことないのでよく分からないけれど。
kage 2009/12/23(Wed)10:54:06 編集
無題
とりあえずswfでSQLコンソールみたいなのが出来たので、面白かったので良しとしました。
MySQLからのレスポンスはPHPが連想配列にしてくれるので、それをJSONエンコードしてswfに渡してます。
KNDY 2009/12/23(Wed)13:36:11 編集
この記事へのトラックバック
この記事にトラックバックする:
26歳のハローワールド
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
最新コメント
[11/27 gyzwviyehl]
[11/18 Tepexaxyonelo]
[09/12 gomFolley]
[08/16 CypeBachCoece]
[06/02 gb]
[03/06 kishima]
[01/18 KNDY]
[01/16 kage]
[12/23 KNDY]
[12/23 kage]
最新トラックバック
ブログ内検索
アクセス解析
プロフィール
HN:
knd
HP:
自己紹介:
絶賛迷走中。
UNIQLO CALENDAR
忍者ブログ [PR]