韓国製パッケージソフト開発秘話
53 名前:_ 投稿日:03/04/28 00:18 ID:Jv0RqavI
韓国人と仕事して困ったことと言えば・・・。
漏れが派遣されたとある職場で、韓国製パッケージソフトの導入が決まった。
韓国でも大手のソフトハウスで、WEB受注パッケージだった。
それはASP+MSSQLで構成され、まあ機能の割に値段が安かったので、
損な導入では無いと思っていた…。
保守は派遣先企業の情報システム部のSEさんが担当し、漏れはそのシステムには
一切触れることは無かった。
※そのSEさんはASPは読めない。
それなりに平和な日常が過ぎ去っていたある日。
その事件は起こった・・・。
------------------------------------------------------------
55 名前:54 投稿日:03/04/28 00:37 ID:Jv0RqavI
その日の午後、情報システム部の部長が私を呼んだ。
部長 「○○(システム名)のウィルス感染は聞いてると思うんだけど、以前から
少し挙動がおかしいようなんだ」
漏れ 「挙動がおかしい?」
部長 「担当者は経験が浅くてね。君、ちょっと手伝ってやってくれないか?」
漏れ 「はい、解りました」
漏れはASPコードのレビューをすることになった。
これが、さらなる事件の幕開けだった…。
ソースをレビューして30分後。
漏れは、唸った…。
そのコードには、トランザクション処理が、無かった。
------------------------------------------------------------
57 名前:55 投稿日:03/04/28 00:53 ID:Jv0RqavI
あまりに「アレ」な出来のコードを見て、担当者と相談することにした。
漏れ 「これでよく動いてますね・・・。これ、やばいですよ」
SE 「そんなにヤバイの?」
漏れ 「ええ、データを保存してる最中にネットワークが遮断されたら、
その受注データはお陀仏です」
SE 「それほんと?」
漏れ 「データの整合性が保てませんし、この採番テーブルが更新されず、受注番号が
既存データと重複する危険があります。
そうなったら、プライマリキー制約で受注ができなくなります」
SE 「それはまずい・・・・・・部長に相談してくる」
かくして、受注WEB改修プロジェクトが発足する。
しかし漏れは、このとき重大な命令文を見逃していた。
韓国人プログラマは、更なる落とし穴を用意していた…
------------------------------------------------------------
59 名前:57 投稿日:03/04/28 01:04 ID:Jv0RqavI
深夜、ソースを修正していた漏れは、ふとURLの引数をいじってみた。
「http://www.〜ORDERNO=E90098」という名の引数の98を・・・97にしてみた。
すると、たちまち見ず知らずの人の受注データが表示されたではないか。
漏れは、錯乱した。
漏れ 「こ、こここ、こ・・・これ・・・・・」
SE 「どうしたの?ちゃんと動いてるみたいだけど・・・」
漏れ カチャカチャ・・・タンッ! ← 震える手で、キーボードを叩く
SE 「え?」
漏れ 「・・・・・・ここ、顧客データが漏洩している可能性があります・・・」
SE 「え?え?なんで・・・って、カード番号とかもでてるぅ!」
SE 「た、たたた大変だぁ!ぶぶ部長の携帯に連絡する!」
かくして、仕事量が倍になりました。
会社内でも凄い問題になりましたが、真実を知っている人間が漏れとSEさんと
上層部のひとだけだったので、
会社としての信用を失墜する前に対策がとれたのがせめてもの救いです。
韓国系ソフトハウスは、顧客情報なんて屁とも思ってないのか・・・。
------------------------------------------------------------
60 名前:57 投稿日:03/04/28 01:23 ID:Jv0RqavI
>>58
スマンす。用語の解説を以下に。
ASP = Active Server Page の略。VBの簡易版言語。あるていど簡単にプログラムが出来る。
MSSQL = Microsoft SQL Serverの略。マイクロソフト製データベース。スラマーに簡単にやられる。
ASPコードのレビュー = ここでは、プログラムの内容をチェックし、問題点を洗い出す作業のことです。
トランザクション処理 = データベースへデータを保存中に事故が起こっても、処理を行う前に戻せる処理のこと。
UNDOとか、Ctrl+Zみたいなもの。
データの整合性を保つ為に絶対必要。
「Begin 〜 処理 〜 Commit」 ←この、「Begin」から「Commit」までの間に
事故が起きたら、「Rollback」する。
そうすると、「Begin」直前まで処理をなかった事にしてくれる。
データの整合性 = データに矛盾が無いこと。
採番テーブル = シリアル番号とかの連続した番号は重複すると大変にまずいので、採番テーブルをつくって、
そのデータを1づつ加算し、確実に連続した番号を取得するよう工夫している。
プライマリキー制約 = データベースにはプライマリキーというのが設定できて、プライマリキーに設定された項目は
値の重複が許されない。
もし重複した場合、データの保存が出来ないようロックされる。
------------------------------------------------------------
62 名前:60 投稿日:03/04/28 01:36 ID:Jv0RqavI
んで、何が問題だったかというと・・・。
ネットワークが遮断されても問答無用でデータを保存し、かつデータがぶつ切りになっても
気にしないプログラムになってた。
※通常の場合、何か事故があったら処理をやり直す。
現に、顧客の住所とかが無いのに商品のリストだけ保存されてたり、カード情報とかが抜けてたりした。
あと、WEBシステムってのは、URLに引数っていう情報をもっていて、そいつを元にデータベースを
参照したりしするのだが、その引数を弄るとまったく関係の無いお客さんの情報まで閲覧できてしまう
構造になっていた。ORDERNOってのは受注番号のことで、これが全ての情報の鍵となる番号だったわけで。
この受注番号さえあれば、そのお客さんの全ての情報を引き出せる事ができてしまう。
Playstation.comでも同じ事件がありました。
カード番号も余裕で見れるので、下手したらカード詐欺に使用されている危険性もあった。
韓国企業は顧客情報の保護なんて考えていないようで・・・。
しかし物語形式にしたのは失敗だった・・・。