ゲームが気になりすぎて背後のあの人に気が付かず
次の日、星野君は出社すると早速まこと先輩にメールを出して、アドバイスを待つことにした。とはいうものの、やっぱりFlashゲームのことが気になってしまい、こっそりと自分のWebサイトをちょこちょこ眺めていた。
平野部長 「ゲームやってるなんて余裕だな」
突然耳元で野太い声がした。
星野君 「あ……、えっと、これは……」
特にまっとうないい訳も思いつかなかったので、星野君は言葉に詰まってしまった。
平野部長 「そうかそうか。仕事たくさん用意してやらないとな。さて、今度は何をやってもらおうかな……」
このところ平野部長は出張が多くて席にあまりいなかったのですっかり油断していた。よりによってこんなときに現れるなんて……。しかも聞くところによると、今日で当面の仕事が一段落したらしく、しばらくは出張がほとんどないそうだ。これまでは比較的自由に勉強の時間をとりながら仕事をすることができていた星野君であったが、これからは平野部長から頼まれる雑用で忙殺されることが容易に予想できた。
そうこうしているうちに、早速雑用が降ってきた。「会議で使うプレゼンテーション資料をアニメーション化したい」とかいう、どうでもよさそうな内容だ。例によって「分かりやすく」というだけの非常にあいまいな指示で、具体的にどういったアニメーションを求めているのかが分からないので、地味に時間がかかる作業になりそうな気配だ。
星野君がせっせとアニメーションを作っていると、まこと先輩からメールが返ってきていた。
えっと……。Webアプリケーション相談窓口じゃないんだけど……。
これって仕事と関係ないよね??
ま、今回はWebアプリケーションの勉強の延長ってことで答えとくか……。
Flashを使ったWebアプリだと、Webサーバ側でFlashからのリクエストを信頼する作りになってる場合が多いけど、通常のWebアプリと同様にWebサーバ側でリクエストの正当性をチェックしないとダメ。
なので、
「重要な処理はWebサーバ側で行う。Flashは表示部分を担当する」
というのが安全な作り方かな。
今回の場合だと、Flash側で行っている「戦闘実行」の部分をサーバ側でやるってとこだね。
アクションゲームみたいに、どうしてもFlash側で処理しなくちゃいけない場合は、Flash側で暗号化してWebサーバ側で復号する、っていう方法もあるにはあるかな。ちょっとしたいたずらなら対処できると思う。
ただ、Flashって逆コンパイルができちゃうから、中のActionScript見られたら意味ないので注意。逆コンパイルされても解析しにくくする方法はあるみたいだけど……。まあ、解析しにくいってだけみたいだね。なので、できる限りFlash側で重要な処理をさせないっていう根本解決にすべきだね。
ほとんど作り直しだー
星野君は、Flashから送られるデータが正しいものであるという証明ができればいいなと考えていたのだが、どうやらデータを暗号化しても根本的な解決にはならないようだ。Flashが逆コンパイル可能だというのは、星野君にとっては初耳だったが、ちょっと調べてみただけで、逆コンパイルができるフリーソフトをいくつか見つけることができた。
ということは、Flashから送信されるデータを暗号化することで取り急ぎの対策としては済ませられるかもしれないが、根本的な解決をするためには、Flash側でやっている処理の大半をWebサーバ側に移行しなければならない。
星野君 「えー……。ほとんど作り直しだ……」
昔作った古いFlashゲームに関しては、Webサーバへの登録の部分を削ることにし、新しく作ったものは面倒だが地道に手を加えて直すことにした。だが、取りあえずは目の前の仕事だ。プレゼンテーション資料のアニメーションを完成させなくてはいけない。
星野君 「平野部長〜。ここのページのこの絵なんですけど……」
次回予告:
ゲームのことが気になってしょうがない星野君。ところが悪事は重なるもので、会社の管理アプリケーションにログインできなくなった社員が困っているらしい。ハッキングか?はたまた人為的なオペレーションミスか?
まこと先輩のWebアプリ・チェックポイント!
Check!
Flashを利用していてもリクエストを書き換えることが可能
一見書き換えるのが困難そうなFlashから発行されるリクエストでも、通常のWebページと同じようにHTTPで通信を行っている。従って、途中でリクエストをインターセプトすることができてしまう。Flashを利用する場合でも、ユーザーからの入力のチェックは正しく行おう
Check!
ユーザーからファイル名を直接指定させない
汎用的に作っているWebアプリケーションほど、ファイル名を直接ユーザーから指定させることが多い。思わぬ情報漏えいにつながるため、静的に用意できるパラメータはWebサーバ側で管理するようにしよう。
Check!
重要な処理はFlash側で行わない
Flash側で複雑な処理を行い、サーバ側に結果を渡す作りではデータの正当性を確保することが困難になる。そのため、できる限りサーバ側で重要な処理を行い、Flashは主に表示部分を担当するという作りが望ましい。
Profile
杉山 俊春(すぎやま としはる)
三井物産セキュアディレクション株式会社
テクニカルサービス事業部検査グループ
コンサルタント
セキュリティコンサルタントとして、主にWebアプリケーションのセキュリティ検査などに従事している。大手就職活動支援サイト、ショッピングサイトなどの検査実績を持つ。
Copyright © ITmedia, Inc. All Rights Reserved.