PHPで可逆暗号化する

MySQLを確認したついでにPHPでの可逆暗号化も調べました。

Mcrypt暗号化関数で行うようで、いろいろ試して、いざ本番サーバで動かすと「Call to undefined function mcrypt_get_iv_size() 〜」と、エラーが…。PHPINFOで確認したらMcryptが使えない模様…。

ということで別の方法を探したらPEAR :: Crypt_Blowfishであれば、Mcryptが使えなくても利用できるようなので、さっそく試したところ動作しました。

require_once ("Crypt/Blowfish.php");

$key = "keyword";
$data = "encodewords";
//暗号化
$blowfish = new Crypt_Blowfish($key);
$encode_data = $blowfish->encrypt($data);
//暗号化したデータはバイナリなのでbase64_encodeでテキスト化
echo base64_encode($encode_data);

//復号化
$blowfish = new Crypt_Blowfish($key);
$decode_data = $blowfish->decrypt($data);
//rtrimで「\0」を取り除く
echo  rtrim($decode_data, "\0");

注意点は暗号化したデータを表示させるときは「base64_encode」を通す、復号化したときはお尻に「\0(ヌル文字)」がついている場合があるので取り除く、こと。

暗号化についてはもうちょっと理解できてない部分があるけど、ひとまずはここまで。

PHP: Mcrypt – Manual
PEAR :: Package :: Crypt_Blowfish
2007-11-08 – Do You PHP はてな「PHPで暗号化・復号あれこれ」の続き

SQLBuddyがいいかも

なんとなく昔っからphpMyAdminが好きじゃなくて、ちょこちょこいろんなものを試したけど、なんかしっくりこないものばかり。以前ちらっと試してみようと思いながらほったらかしにしてた「SQL Buddy」を試してみました。

少し触ってみた感じシンプルやし、使い心地はいい感じ!Import、Exportは試してないけど、しばらくこれ使うことにしてみます。

SQL Buddy – Web based MySQL administration

PHP – session利用のまとめ

PHPでセッションを使うことがあったのでまとめのメモ。

.htaccessの設定

//URLにセッションを埋め込まない
php_flag session.use_trans_sid Off
//セッションをcookieに保存
php_flag session.use_cookies On
//セッションをcookieのみの仕様
php_flag session.use_only_cookies On
//自動でセッションを開始しない
php_flag session.auto_start Off

セキュリティ強化のために基本はcookieのみ仕様可能な設定にしておく。携帯に対応する場合は下記ページのコメント欄が参考になりそう。
ke-tai.org > Blog Archive > PHPでケータイからセッションを使う場合の設定方法

PHPで基本設定

//セッションを保存するディレクトリを指定
session_save_path('/○○/tmp');
//IEの「ページの有効期限が…」を防ぐ
session_cache_limiter('none');
//キャッシュの有効期限を分単位で指定
session_cache_expire('60');
//カレントのセッション名を変更
session_name('SESSID');
//必要であればセッションクッキーパラメータを設定
$lifetime = 0;
$path = "/";
$domain = "detelu.com";
$secure = false; //セキュアな接続(HTTPSプロトコル)の場合にのみクッキーを送信
$httponly = true //JavaScriptからのアクセスを許可しない 5.2.0以上
session_set_cookie_params  ($lifetime, $path, $domain, $secure[, $httponly])
//セッションスタート
session_start();

※セッションクッキーパラメータ使ってよりセキュアに!
なぜPHPアプリにセキュリティホールが多いのか?:【スクリプトインジェクション対策03】セッションIDが利用できる範囲を制限する|gihyo.jp … 技術評論社

セッションIDを置き換える

//PHP5.1.0以上ならsession_regenerate_idを利用
session_regenerate_id(delete);
//それ以下なら下記を利用
$session_data = $_SESSION;
session_destroy();
session_id();
session_start();
$_SESSION = $session_data;

↑古いセッションが残ると意味がないので、環境によって使い分ける。

セッションを破棄する

$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
	setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();

※キャッシュの問題
IEの場合ブラウザのバックで戻る等いろいろ動作を試したがなんか動きが???
ちょっと調べるとURLに任意の文字列を与える(mktime()等)ようにしたらいいような感じのことが書かれていたので試したところ、ようやくまともに動いた!
けどもうちょっとスマートな方法はないのだろうか?もうちょっと設定を変えつつ試してみよう。

※2008-02-08 理論値を「”」で括ってしまってました…。「ぺ」様、ありがとうございます、修正しました。

  • Category : PHP
  • Tags :