以前、EC-CubeのプラグインでSMBCのカード決済プラグインを調査してバグを見つけたわけですが、本日、新しいモジュールに「しれっ」と変更されたようです。IPAに報告しましたからね。何か気づいたのでしょう。
一瞬(数日間)非公開になっていたことから、色々頑張ったんでしょう(笑)
で、その改修が、また、おそ松くんというか・・・(笑)
以前のコードはこんな感じ。
// パスワード等をマスクする if (!$raw && is_array($msg)) { $keys = array('card_no', 'security_cd'); foreach ($keys as $key) { if (isset($msg[$key]) && !is_array($msg[$key])) { $msg[$key] = str_pad('', strlen($msg[$key]), '*'); } } $msg = print_r($msg, true); }
今度のコードはこんな感じ。
// パスワード等をマスクする if (!$raw && is_array($msg)) { $keys = array('card_no', 'security_cd'); foreach ($keys as $key) { if (isset($msg[$key]) && !is_array($msg[$key])) { $msg[$key] = str_pad('', strlen($msg[$key]), '*'); } elseif (isset($msg[$key]['value'])) { $msg[$key]['value'] = str_pad('', strlen($msg[$key]['value']), '*'); } } $msg = print_r($msg, true); }
以前は、
・card_no って変数見つけたら、配列じゃなければ「*」に置き換えるよっ!
ってコードでしたが、今度は、
・card_noって変数のvalueって配列変数だったら「*」に置き換えるよっ!
ってのが追加されてました。
いやいや、マジかよ。いいのかよ・・・・(笑)
理屈はわかるけど、その前の分岐条件が怪しい。
この辺の言語仕様はphpのバージョンによっても動きが様々かもしれませんが、ね。
} elseif (isset($msg[$key]['value'])) {
これは、やばくないっすか(笑)
いや、やりたいことわかるけどさ。。。。。
もし、$keyがあずかり知らん名前だったらどうすんのよ。phpが良きに計らってくれる可能性もあるけど、普通考えたら、
} elseif (isset(null['value'])) {
って可能性もあるわけでしょ?
ちゃんとしたプログラマなら、こんな書き方は、言語仕様の変更等で怖いからやらない気がするんよね・・・
どうせやるなら、多次元配列を再帰的にarray_key_existsを使ってチェックする関数作るべきだと思うんだよね・・・
シロートかよ(笑)
まぁ、それより気になるのは、今まで蓄積してた、カード情報をどうするんですかね。。。
使ってる業者全員に連絡入れるんすかね・・・?
入れなければ、これ、まずいっすよ。きっと。。。。。