- ベストアンサー
別ドメインに渡すデータの受け渡しについて
- 複数のサイトで申し込みを受けるためのデータ受け渡し方法について不安があります。
- 会員登録から申し込み情報を別ドメインのシステムに渡す方法を考えていますが、データの改竄が心配です。
- カード決済は使用しないため、最終的に人の目で確認することでトラブルを防止できると考えています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
自分だったら、各サイトごとに鍵を変えて、HMACで電子署名をつけますね。 具体的には、POSTで渡す直前で確認ページを表示し、そこに次の内容を仕込んでおきます。 ・商品の価格 ・商品の名前 ・どのサイトから来た申し込みなのか ・申し込みを行ったページのURL + 現在の日付+時刻 + 鍵のIDなど (*後述) + HMAC値 (*後述) それから、これらすべての値を「会員登録から申し込みなどを完成させるシステム」に送ります。 送られたサーバーではHMAC値が一致することを確認し、日付+時刻も一定時間内であることをチェックします。そうすると、改ざんがあればHMAC値が変わりますし、同じHMAC値を使ったリプレイ攻撃も一定時間以降は無効化されます。 HMACの値はこれ以外のすべての値を:などで順に連結したものをメッセージとして、送り元・送り先で共有した鍵で計算して作ります。HMAC値を計算するライブラリーはいろんなプログラミング言語に提供されているので、それを使うとよいでしょう。また、特別な理由がなければハッシュ関数にはSHA256あたりを選択しておけばよいでしょう。 鍵にIDがあるのは、鍵が暴露した時に鍵を入れ替えてシステムを保つためです。あるいは、同じ鍵で計算し続けるとどうしてもシステムとして弱くなるので、定期的に鍵を変更できるようにするためです。これも、鍵の値のハッシュ値を使ったり、一意なバージョン番号を振って数えたりすればよいでしょう。自分だったら、Javaで作っていたらKeyczarあたりを使いたいところですが。 というわけで、自分だったらデータをやりとりするサイトごとにHMAC鍵を用意して、タイムスタンプをつけた上でHMAC値を計算し、それで改ざん防止とリプレイ防止を図ります。また、HMAC鍵はバージョン管理しておき、定期的に変更します。なお、当たり前ですがHMAC鍵は送信元・送信先のサーバー以外では見えないようにするよう厳重管理です。
その他の回答 (1)
- dscripty
- ベストアンサー率51% (166/325)
もう一つの実装方法。 ウェブブラウザを通すと改竄の可能性があるから、直接サーバ同士で情報をやり取りするよ! まず、 新しく作るサーバの SSL ポートを標準以外にして、もう一つ立てる。 立てた SSL は双方向認証にして、不特定の PC からの接続を拒絶。 次に、 立てた SSL への通信をアプリケーションサーバに渡して、申し込み情報の POST を受け付けるように設定する。 実際の流れは、 ウェブブラウザで、申し込み確定をクリック ↓ 各サーバは、新しく立てたサーバの標準以外のポートで立てたほうの SSL へ接続して POST。 ↓ 新しく立てたサーバが POST 結果を、各サーバに返す。 ↓ 各サーバは POST が失敗ならエラーログでこの件の取引をレポートして、処理は継続。 ↓ ウェブブラウザに、申し込み手続き完了のページを表示する。 おしまい。
お礼
返信が大変遅くなってしまいました。 なるほど~、サーバー毎にアクセスを可にすれば、強固なセキュリティになりそうです。 ただ、現在の私の環境では、簡単には実行できそうにないので、参考にさせていただきます。 ありがとうございました。
お礼
返信が大変遅くなりました。 Hamacと言う仕組みを知らなかったので、早速色々調べてテストで実装してみました。 すごく勉強になりました。 ありがとうございます。