‘技術解説’ カテゴリの記事
以前から気になっていた PHPフレームワーク 「CakePHP」 を使ってみました。
実際に使った小技などはこれから紹介していくとして、感想から。
第一印象:なんか気持ち悪い
第一印象は「なんか気持ち悪い」でした。
というのは、CakePHP の思想 「設定より規約」に慣れていなかったためです。
長い間 C++ を使っていた私にとっては、PHPなどのスクリプト系言語で宣言しなくても変数が使えるというのが、元々とても気持が悪いものでした。
CakePHP はそれに加えて、ちょっとしたファイルを何個か書くだけでDBアプリができてしまうのです。
「規約」に従ってさえいれば、この「ちょっとしたファイル」には SQL文どころか、テーブル名すら書く必要がありません。その規約も、「テーブル名は名詞の複数形」「クラス名は大文字で始まる単数形」とかその程度。
宣言や定義なしで動くというのが、なんか恐ろしいような気持ちの悪いものでした。
今の印象:これは楽しい
しかし少し使ってみて仕組みが分かってくると、印象がガラリと変わりました。
とにかく楽(らく)なのです。
例えば password というフォームを作ったら、たいてい ***** で表示したいし、 DB では password フィールドに格納したいですよね。
普通ならそれらをコードで書いていくわけなのですが、CakePHP はそれらを勝手にやってくれます。
DBにはフォーム名と同じフィールドに入れてくれるし、型や名前にふさわしいGUI部品にしてくれるのです。
ゴチャゴチャとしたコーディング作業の時間が大幅に短縮され、モノづくり本来の楽しみ(人によって違うでしょうが・・・)に使えるな、と思います。
これから少しずつでも、CakePHPの魅力を伝えていきます。CakePHP の習得に二の足を踏んでいる方の背中を押せたら嬉しいですね。
何回かに分けて、SmartyでPEAR::Auth を使うためのサンプルを説明しています。
「その4でひとまず終わり」と思っていたら、動かないというご指摘を頂きまして、login.tpl を載せていないことに気が付きました。
ついでに、書き忘れていた注意点も。
login.tpl
<!DOCTYPE html> <html dir="ltr" lang="ja"> <head> <meta charset="UTF-8" /> <title>{$smarty.const.APPLICATION_TITLE_NAME}</title> </head> <body> <form method="post" action="{$smarty.server.PHP_SELF}"> <table> <tr> <th>ユーザー名</th> <td><input type="text" name="username"></td> </tr> <tr> <th>パスワード</th> <td><input type="password" name="password"></td> </tr> <tr> <td colspan="2"><input type="submit" value="ログイン"></td> </tr> </table> </form> </body> </html>
ログインページのテンプレートです。
PEAR::Auth の仕様で、input の name 属性は、ユーザ名は username 、パスワードは password 固定です。
注意点
今までのことで書き忘れていたことです。
template_c のアクセス権
Smarty はテンプレートをコンパイルして template_c ディレクトリに置きます。
Smarty は HTTPサーバのユーザ( apache など )の権限で動いており、一方 ftp などで template_c を作ると各ユーザの所有になります。
なので、アクセス権は 777 になっていないとダメかもしれません( ユーザ apache が読み書きできる必要がある)。
文字コード
サンプルはUnicode用にしています。
それ以外の文字コードの場合は、テンプレートファイル(*.tpl)のcharset を変更(Shift_JIS や EUC-JP)してください。
PEAR のパッケージ
PEARのパッケージは始めから全部はいっていないので、必要に応じてインストールしてください。
インストールされているかの確認はコマンドラインから。
pear list
今回のサンプルでは少なくとも Auth と DB のパッケージが必要です。
もしインストールされていなければ、
pear install Auth
などとして、インストールしてください。
Smarty
Smarty は、PHPのテンプレートエンジンで、Webアプリケーションのロジック部分とデザイン部分を分けて開発することができます。
・・・という程度の認識しか持っていなかったので、今まではあまり魅力を感じずに、使っていませんでした。
ところがちょっと前に、 Smarty を使ったWebシステムの改造をすることになり、初めて真剣に取り組むことになりました。
目からウロコが落ちました。
よく言われる「ロジック部分とデザイン部分を分ける」というのは、ただ単に「別の人が作業しやすい」だけではなく、ソースコードが見やすくなるということだったのですね。
特にPHPでのWeb開発では、PHPとHTMLがごちゃごちゃに入り交じったコードになりがちです。それが Smarty だと、PHP(ロジック部分)とHTML(デザイン部分)に綺麗に分けられます。
食わず嫌いでした。これからは積極的に取り入れようと思います。
ITPKの開発環境は、オープンソースソフトウェアを多く導入しています。
もちろん、無料というのはとても大きい要素ですが、私はオープンソースには「無料で使える」以上の魅力を感じています。
今日は、そのオープンソースについてです。
SSL通信はなぜ安全なのかを解説するシリーズの記事です。
今回は初回ですので、SSLとは何のために使用するものなのかを紹介します。
インターネットでの通信
インターネットでやり取りされる通信は、実は簡単に盗聴できます。
原理を説明すると難しくなるので省きますが、例え話で説明しましょう。
ここは、学校の教室だと思ってください。ちょっと悪知恵のつき始めた小学校高学年くらい。
先生の目を盗んで、紙切れに手紙なんかを書いて回してます。

インターネットの通信は丸見え
紙の表には「宛名と送り主」を書いてあり、裏にメッセージが書いてあると思ってください。
間の席にいる生徒たちは紙が回ってきて、自分宛でなければ隣や前後の生徒に渡します。自分宛だったら裏のメッセージを読みます。
インターネットのしくみは、簡単にすればこのようなものです。
ところで、生徒同士のメッセージのやりとりの例では、途中の生徒が見ようと思えば、簡単にメッセージの内容を見ることができます。隣に回す前に、裏返して見てしまえばいいだけです。
実は、インターネットでの通信もこの程度のものなのです。
例えば、職場によっては従業員のネット利用を監視していることがあります。それは、通信内容を途中で見ることができるから、可能なのです。
暗号化
秘密のメッセージを送る必要がある場合は、どうすればよいのでしょうか。
直接手渡しをする、という方法ももちろんあります。丸めて抜群のコントロールで投げつけるとか、エアシューター を設置して飛ばすとか・・・。どちらにしても現実的ではありませんね。
PCのネットワークでは、インターネットを使わずに専用線を引くこともできます。こちらはまあ現実的な手段です。ただし、コストを考えると現実味は薄れます。
また、不特定多数を相手にするのは事実上不可能です。
今ある仕組みをそのまま使って、秘密にメッセージを送る方法が、暗号化です。
秘密のメッセージを送ることができる
暗号化通信の役割の1つ目は、そのままですが「秘密のメッセージを送る」ために使用するというものです。
A君はE君にしか分からない(=E君は復号できるけど、それ以外は解読できない)ように暗号化するのです。
今さらですが、出てくる言葉の説明をしておきます。
暗号化とは「平文(ひらぶん=伝えたいメッセージそのままの文章)を何らかのルールで変換し、第三者が読めないようにすること」。
復号化とは「本来読むべき相手が、きちんとした手続きで平文に戻すこと」。
それに対して解読とは「本来ならば読むべきでない第三者が、不正な手続きで平文に戻すこと」をいいます。
誰が暗号化したのかが分かる
もう一つ役割があります。こちらは多少分かりにくいのですが、「誰が暗号化したものかを示す」ためにも使えます。
ある暗号化方式を使うと、「この暗号のかけ方は A君だ」ということが分かるのです。
これは、暗号に使用する「鍵」を、1人1人が違うものを使用する、というルールによって成り立っています。
A君の「鍵」はA君だけが使い、他の鍵ではA君の鍵とは別の暗号になります。
他の誰かが「Aより」なんて書いたとしても、A君の暗号にはできないので、ばれてしまうのです。
これについては、「公開鍵方式」で説明します。
まとめ
SSLでできることは、
- 盗聴 を防ぐことができる
- なりすまし を防ぐことができる
です。
最近書いた記事に、よく SSL という言葉が登場します。
どの記事でも「SSLで暗号化通信をすれば安心」と、さも当然のように書いてしまっています。
ですが、読んでくださっている方の中には、「本当に安全なの?」「なんで安全と言い切れるの?」と疑問を感じる方もいらっしゃるでしょう。
そこで、何回かに分けて「SSL通信はなぜ安全なのか」について、解説します。
目次
解説記事の目次です。書き終わった記事へはリンクを張っていきます。まだ書いていない記事は、予定なので変更するかもしれません。
- SSLでできること
- 共通鍵方式とは
- 公開鍵方式とは
- SSLのしくみ
- なぜSSLで「盗聴」を防げるのか
- なぜSSLで「なりすまし」を防げるのか