[PHP-users 11851] Re: PHPバージョンによる相違

Naofumi Kondoh php-users@php.gr.jp
Thu, 28 Nov 2002 08:04:30 +0900


ソフト工房の近藤です。こんにちは。

# 話が元の Subject からずれますが。

Osamu Shigematsu wrote:
> 重松です。こんにちは。
> 
> On Wednesday, Nov 27, 2002, at 23:53 Asia/Tokyo, Ryotaro Shimazu wrote:
> 
>>> 全くその通りです。
>>> hiddenで変数を渡す場合、配列にした値をserialize、圧縮、urlencode
>>> しmessage digest方式で改竄チェックをするsecure_serialize
>>> 関数という関数を作ってチェックしています。ずいぶん前に、zend.com
>>> のCode Exchangeにポストしているコードと仕組みは同じです。

私も、必要なオブジェクト(正確にはプロパティーだけ)を
配列に入れたものを seriralize して、md5 で改竄チェック
できるようにして hidden に入れる方式を使う事があります。
# 普通は、server 側にファイルしてしまうので、あまり
# 使うことはないですが。

圧縮はしていなかったのですが、回線が遅い時は効果があり
そうですね。今度テストしてみます。

-- snip --

> 私もつい最近この手法を使いましたが、まあ、イントラなので、圧縮は行ってい 
> ません。
> 
> // confirm.php
> $pdata = serialize($data);
> $magic = md5(md5('qwerty') . md5($pdata)); // パスワードは隠すべし

-- snip --

私は、
$magic =  md5(KEY) . md5($pdata);
というように、くっつけるだけで、重松さんのように再度
md5 をかけるというようなことはしていません。  md5 の
結果に再度 md5 をかけると、どのようなメリットがあるか
お教え頂けると幸いです。

# md5だとばれにくくするために、前後と途中に記号や
# g - z の英字を適当に突っ込んだりはしますが。

あと、md5 の出力は 16進数になるので、これを base64
の用に ASCII CODE 64 文字に変換したいのですが、PHP で
書く場合、なにかうまい書き方はあるでしょうか?。
scanf で、16進文字列を、数値に変換して配列で文字を
ひっぱてくるというのはなんかスマートでないような気がして。

# C だと文字列の文字単位の処理が簡単なんですがね。
# PHP で、文字列変数を添え字で1バイトづつとりだす方式
# $mystr{$idx} は、推奨されない方法ですよね。

まああ、単に md5 でやってるなと一発で見抜かれないように
して、改竄の危険を一寸だけ回避できないかなという程度の
ことだけなんですが。

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 (株)ソフト工房   近藤直文        Email:  nkon@shonan.ne.jp
http://www.SOFTKOUBOU.co.jp/      http://www.shonan.ne.jp/~nkon/
2002-11-28(木)19:00-21:30 第8回PostgreSQL業務アプリ分科会 勉強会
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/