×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
とりあえず、「PHPでサクサクサク~ッとCGIを作ってやろう」と思ったってところから始まった。
「やるからには画面部分はAS3(swf)で書く」と決めた。
で、大量のデータを条件で検索したりする場合、DBを使うと良い、って事を知った。
ていうか、普通ですね。
最初にさわったDBはPHPに標準で付いてるSQLite。XAMPP入れたからMySQLもあったんだけど、まあ、なにせ初めてだからね。まずはPHPだけで何とかしようとしたんだと思う。
SQLiteは、何ていうか、かわいかったなあ。カラムに型が、実質無いってのはやりやすかった。
でも、駄目だった。何でだったかなあ、思い出せないけど、AS側から上手く使えなかった。
で、結局MySQLを勉強し始めた。
つーか、そもそも「ASからSQLをどのように利用するか」っていう前提部分が、マズかったんだなあ。
「やるからには画面部分は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であること」だ。
(完成する見込みもないプログラムの配布後の事まで想定しているのは、これはつまり手段の目的化によるものである。)
で、以下の手順を取った。
まあ、そんなこんなでPHPに直接SQL文をPOSTしてもどうやら大丈夫そう、っていうところまで来た。
あとはMySQLのTABLEをAS3でラップしたりして(どうやらO/Rマッピングっていうらしい)、そうしたらやりたい放題だと、そんな風に考えていた時期もありました。
えーと、反省文続く。
早い段階で薄々「よろしくねえなあ」とは思いつつも、やらずには居られなかった。
ただ淡々とSQLを実行するPHPだけ書いてやれば、あとはASだけでやりたい放題になる訳だからね。
でも当然このPHPは、そのままだと誰からSQL文をPOSTされても従順に実行してしまうわけだ。
実にイクナイ。
動いてもいないプログラムのセキュリティなんぞ気にしても仕方ないはずなんだけど、そこで見事に手段と目的がすり替わった。
つまり、この問題をいかに解決するかが当面の目標となった。
SQLを処理するPHPにおいて認証しなければならないのはリクエスト主が、「僕が書いたASプログラムであること」と、「PHPと同一の管理人のSWFであること」だ。
(完成する見込みもないプログラムの配布後の事まで想定しているのは、これはつまり手段の目的化によるものである。)
で、以下の手順を取った。
- サーバはクライアントからリクエストがあると、まずランダムな文字列(チケットA)を発行する。
- そして発行したチケットAと管理者が設定した文字列(鍵X)を連結し、不可逆関数でハッシュ(チケットB)を求める。
- チケットBをランダムに生成した文字列(鍵Y)と連結し、更にそのハッシュ(チケットC)を求め、チケットCと鍵Yを対にしてログファイルに記録する。(チケットCは鍵Yによって暗号化されてると言えるが、この1対があってもチケットBを求めることは出来ない。)
- 一方クライアント側は、チケットAと鍵XからチケットBを求める事ができるので、SQL文と一緒にこのチケットBもPOSTする。
- CGI側では受け取ったチケットBと鍵Yによって求めたハッシュがチケットCと等しいかどうかによって、正しいクライアントからのPOSTかどうかを確認出来る。
- 文字列sのハッシュはハッシュ関数HによってH(s)と表現され、またH(s)の値からsを求める事は出来ない。
- 演算子#は左右のオペランドに文字列をとり、その演算結果について、A≠B のとき必ず C#A≠C#B が成り立つ。
- クライアントとサーバはともに関数Hと文字列Xを知っている。
- サーバは関数Gと文字列Yを知っている。Yは毎回ランダムに生成される。
- サーバはランダムに生成した文字列Aをクライアントに渡し、更に ( G( H( A#X )#Y ), Y ) の値の組を記録する。
- クライアントは受け取ったAと既知のH, Xから H( A#X ) を求めてサーバに返す。
- サーバはクライアントから受け取った値 B について G( B#Y ) を計算し、記録した値との比較からクライアントの認証を行う。
まあ、そんなこんなでPHPに直接SQL文をPOSTしてもどうやら大丈夫そう、っていうところまで来た。
あとはMySQLのTABLEをAS3でラップしたりして(どうやらO/Rマッピングっていうらしい)、そうしたらやりたい放題だと、そんな風に考えていた時期もありました。
えーと、反省文続く。
PR
この記事にコメントする
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 |
最新記事
(05/23)
(05/11)
(05/09)
(05/08)
(05/08)
(03/07)
(02/25)
(02/07)
(02/07)
(01/28)
最新コメント
[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]
最新トラックバック
カテゴリー
アーカイブ
ブログ内検索
アクセス解析