プロが教えるわが家の防犯対策術!

はじめまして。
Webに関するセキュリティでお伺いしたいのですが、現在複数のサイトを運営しています。運営サイトの全てにおいて、何らかの申し込み(物品販売の申し込み)という形で注文を受けています。
よって各サイトにフォームを設けて運営しているのですが、現在は単純な送信フォームを使用していますが、今後は申し込み者に会員になってもらい、購入したものによってポイントを付与する方法を考えています。

そこで、質問なんですが上記の事を効率的に実現しようと考えた場合に、以下方法を考えましたが、セキュリティ的に不安があったため質問させて頂きました。

まず、会員登録から申し込みなどを完成させるシステムを別ドメインで作ります。(SSL対応)
この作ったシステムに、現在運営中のサイトからお申し込み情報を渡したいと考えています。
お申し込み情報は主に

・商品の価格
・商品の名前
・どのサイトから来た申し込みなのか
・申し込みを行ったページのURL

以上の情報を渡したい考えです。
会員情報などの取り扱いは、システム上で全て行う予定です。

この場合の渡す方法としてPOST等で渡す方法しか思いつかないのですが、他によい方法はありますでしょうか?
この場合知識があればデータの改竄が可能なため悩んでおります。

ただ、カード決済などは今すぐに使用しないので、商品金額等を改竄されても最終的に人の目で確認するのでトラブルはないだろうと思っているのですが・・・・

どうぞよろしくお願いします。

A 回答 (2件)

自分だったら、各サイトごとに鍵を変えて、HMACで電子署名をつけますね。



具体的には、POSTで渡す直前で確認ページを表示し、そこに次の内容を仕込んでおきます。
・商品の価格
・商品の名前
・どのサイトから来た申し込みなのか
・申し込みを行ったページのURL
+ 現在の日付+時刻
+ 鍵のIDなど (*後述)
+ HMAC値 (*後述)

それから、これらすべての値を「会員登録から申し込みなどを完成させるシステム」に送ります。
送られたサーバーではHMAC値が一致することを確認し、日付+時刻も一定時間内であることをチェックします。そうすると、改ざんがあればHMAC値が変わりますし、同じHMAC値を使ったリプレイ攻撃も一定時間以降は無効化されます。

HMACの値はこれ以外のすべての値を:などで順に連結したものをメッセージとして、送り元・送り先で共有した鍵で計算して作ります。HMAC値を計算するライブラリーはいろんなプログラミング言語に提供されているので、それを使うとよいでしょう。また、特別な理由がなければハッシュ関数にはSHA256あたりを選択しておけばよいでしょう。

鍵にIDがあるのは、鍵が暴露した時に鍵を入れ替えてシステムを保つためです。あるいは、同じ鍵で計算し続けるとどうしてもシステムとして弱くなるので、定期的に鍵を変更できるようにするためです。これも、鍵の値のハッシュ値を使ったり、一意なバージョン番号を振って数えたりすればよいでしょう。自分だったら、Javaで作っていたらKeyczarあたりを使いたいところですが。

というわけで、自分だったらデータをやりとりするサイトごとにHMAC鍵を用意して、タイムスタンプをつけた上でHMAC値を計算し、それで改ざん防止とリプレイ防止を図ります。また、HMAC鍵はバージョン管理しておき、定期的に変更します。なお、当たり前ですがHMAC鍵は送信元・送信先のサーバー以外では見えないようにするよう厳重管理です。
    • good
    • 0
この回答へのお礼

返信が大変遅くなりました。
Hamacと言う仕組みを知らなかったので、早速色々調べてテストで実装してみました。
すごく勉強になりました。

ありがとうございます。

お礼日時:2012/06/03 14:59

もう一つの実装方法。



ウェブブラウザを通すと改竄の可能性があるから、直接サーバ同士で情報をやり取りするよ!

まず、
新しく作るサーバの SSL ポートを標準以外にして、もう一つ立てる。
立てた SSL は双方向認証にして、不特定の PC からの接続を拒絶。

次に、
立てた SSL への通信をアプリケーションサーバに渡して、申し込み情報の POST を受け付けるように設定する。

実際の流れは、

ウェブブラウザで、申し込み確定をクリック

各サーバは、新しく立てたサーバの標準以外のポートで立てたほうの SSL へ接続して POST。

新しく立てたサーバが POST 結果を、各サーバに返す。

各サーバは POST が失敗ならエラーログでこの件の取引をレポートして、処理は継続。

ウェブブラウザに、申し込み手続き完了のページを表示する。


おしまい。
    • good
    • 0
この回答へのお礼

返信が大変遅くなってしまいました。
なるほど~、サーバー毎にアクセスを可にすれば、強固なセキュリティになりそうです。

ただ、現在の私の環境では、簡単には実行できそうにないので、参考にさせていただきます。
ありがとうございました。

お礼日時:2012/06/03 15:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!