カートのセキュリティ対策
SSL対応ショッピングカートCGIとSSLの必要性
SSL対応ショッピングカートCGIの比較検討
ショッピングカートCGI
ダウンロードの申込み
ショッピングカートCGIのセキュリティ対策 ショッピングカートCGIのセキュリティ対策

ショッピングカートのセキュリティ対策

ショッピングカートのセキュリティ対策について考えてみましょう。

※当社は「JPCERT/CC製品開発者リスト」登録ベンダです。

SSLとは?ショッピングカートのセキュリティ対策
脆弱性のないショッピングカートを提供し、安心してお店の運営が行なえるようにしたいと考えています。それで、当社のショッピングカート(SPシリーズ)のセキュリティ対策についてお知らせしたいと思います。

セキュリティ対策として一般的に取り上げられている中で、ショッピングカートに関係しているのは主に次の2つです。
  • XSS(クロスサイトスクリプティング)
  • リファラースパム
これらに対する対策が必要です。

また、データが何らかの事故等で流出した場合を想定して、パスワードが暗号化(ハッシュ化)してあれば一層安心できます。

これらの対策について、PC携帯管理の3つについてそれぞれ考えて見ましょう。

【注】XSSなどの用語に関しましてはこのページの最後に掲載したサイトを参考にしてください。

ショッピングカートとSSLの必要性PCショッピングカートのセキュリティ対策
XSS脆弱性は、特殊文字「<」「>」「&」「"」「'」を適切に処理すること(サニタイジング)により回避できます。これによりクッキーのハイジャック等のスクリプト混入を排除できるようにしてあります。

リファラースパム対策としてはIDやパスワードなど重要な情報はクッキーで受け渡すようにしました。それで、URLへの埋め込みはありませんから、リファラースパムの心配はありません。クッキーの有効期限はログアウト又は全てのブラウザーを閉じるまでに設定してあります。ログインの際に「会員IDとパスワードを保存する」にチェックした場合は90日間がクッキーの有効期間となります(楽天と同じ)。
ショッピングカートの場合、クッキーの有効期間は売り上げに関係していますからあまり短くはできません。ログアウト又はブラウザーを閉じる前にセッションが切れるということも望ましくありません。それは、せっかく来店したお客さんを追い返すようなものだからです。

ログインを初め、重要な情報はPOSTのみを受け付けるようになっています。そして、パスワードなど会員情報の変更時にはパスワードの再入力が必要となります。

また、パスワードを暗号化(ハッシュ化)してありますので、万が一、何らかの事故等によりデータが流出した場合でも対策を講ずるまでの十分な時間があります。いずれにしましても、そのような場合、会員データが流出してしまったという事実は変わらないので、早急な対策が必要になります。

パスワードの暗号化はハッシュ(不可逆暗号)を用いています。それで、パスワードの再発行ができません。それで、この場合、仮パスワード(10桁のランダム英数)を作成して送信するという手法を用いています。会員は、仮パスワードでログインしてから、パスワードを変更して使うことになります。

古いバージョンでは、パスワードが暗号化されていませんでしたが、新バージョンのプログラムではパスワードを比較する際に暗号化されているか否かを判断していますので、暗号化されていないデータもそのまま用いることができます。パスワードは会員登録、会員情報の変更の際に暗号化されてファイルに保存されます。

【注】古い会員データのパスワードを一括して暗号化(ハッシュ化)するための手順を解説した「会員パスワード一括暗号化手順」はこちらをご覧ください。⇒会員パスワード一括暗号化手順

【注】パスワード再発行で現在使っているパスワードを知ることができる場合、それはそのシステムでパスワードを暗号化(ハッシュ化)していないことを意味しています。

※暗号化するためにPerlモジュールDigest::SHA1を使います。X-server、Kagoya、さくらインターネットなど、ほとんどのサーバで使えますが、念のためにお使いのサーバにインストールされていることを確認してください。⇒サーバチェックリスト

SSL業者&対応サーバ携帯ショッピングカートのセキュリティ対策
携帯でのXSS脆弱性対策は、PCと同じにしてあります。これまで、携帯ではこうした対策は必要ではなかったのですが、携帯の性能がUPするにつれPCと同じように問題になってきたからです。それでも、携帯ショッピングカートのテストが終了したなら、携帯からのみアクセスできるようにしておくなら、セキュリティは向上します。k_set.plとformk.cgiの最初のところで設定できます。(ログインは携帯からのみできるようにしてあります。)

また、PC同様、ログインを初め、重要な情報はPOSTのみを受け付けるようになっています。そして、パスワードなど会員情報の変更時にはパスワードの再入力が必要となります。それで、ソフトバンクのPOSTが使えない一部の機種(C2)では動作しません。

さて、携帯の場合、これまでドコモでクッキーが使えなかったために、IDやパスワードの情報をURL埋め込みの方法で受け渡さなければなりませんでした。これは、現在でも一般的な手法になっており、クッキーが使えないドコモの機種に関しては止むを得ません。従ってその場合、どうしてもリファラースパムの危険性があります。

リファラースパムは次のようにすることで回避できます。
   1)携帯ショッピングサイトに外部へのリンクをはらない。
その外部のサイトでリファラーを取得するようになっているとパスワードを盗まれることになります。リファラーを取得される一番分かりやすい例はアクセス解析を組み込むことです。ですから、携帯のカートの中には決してアクセス解析を組み込まないようにしてください。(ショッピングカートに付属のページ解析をご利用ください。)
もちろん、次のことは避けてください。
   2)パスワード付きのURLを他の人にメール送信したり、パスワード付きのURLでリンクを貼ったりしない。
もちろん、これは会員自身が注意すべきことになります。

しかし、そうした人為的な脆弱性を含めてパスワードが埋め込まれたURLが知られてしまう危険性を考慮しておくことは大切です。この点でも、パスワードの暗号化が役立ちます。会員パスワードに下記の情報を付け加えて暗号化(ハッシュ化)したものをURLに付けて引き渡します。こうすれば、そのURLを使っても異なる携帯からログインすることは困難になります。
1、UserAgent
2、識別番号(サブスクライバID、ユーザーID、シリアル番号など)
3、時間的な情報

上記の時間的な情報により、URLに付け加える暗号が有効な期間をset_class_pl/pass_code.plで下記のように設定できます。初期値は最終アクセス後、次の週まで有効となるように設定してあります(現在は初期値を次の日までに調整)。ショッピングカートでは有効期間を短くすることは避けたいのですが、短くすればセキュリティは向上します。
  0.暗号の有効期限を設定しない。
  1.最終アクセス後、次の月の月末まで有効。
  2.最終アクセス後、次週の土曜まで有効。
  3.最終アクセス後、次の日の24時まで有効。
  4.最終アクセス後、次の時刻の60分まで有効。(アクセス終了が15:30なら17時まで有効)

このような会員パスワードの暗号化は万が一パスワード付きのURLが他の人に知られてしまった場合でも、問題を最小限にとどめるための対策なのです。携帯ショッピングサイトに外部へのリンクを貼らない限り、パスワード付きのURLが流出することはありません(脆弱性はありません)。

また、誤ってパスワード付きのURLのリンクを貼ってしまっても検索エンジンに拾われないように、ログイン状態の場合に主要検索エンジンのスパイダーのアクセスをブロックするようにしました。それで、パスワード付きのURLが検索エンジンにインデックスされることはありません。

【注】固体識別番号はパスワードを暗号化してURLに付けて引き渡す際に使いますが、会員の認証に使っているわけではありません。あくまでも会員の認証はIDとパスワードで行ないます。固体識別番号はリファラースパムに対処するために使用します。固体識別番号による認証は偽装される可能性があるのです。

【携帯3キャリア及びiPhone、Androidの仕様の違い】

DoCoMo AU SoftBank iPhone Android
クッキー 利用不可。
2009/5(iモードブラウザ2.0)以降で利用可能
利用可能
常にon。
利用可能
offに設定できる。
利用可能 利用可能
リファラー 利用不可。
2009/5(iモードブラウザ2.0)以降で送信。
送信する。 送信する。 送信する。 送信する。
固体識別番号 formに記述して取得。常にメッセージ表示。
SSLでは不可。
ない。 取得可能。ただし、携帯側でon設定が必要。 ない。 ない。
ユーザーID formに記述して取得。常にメッセージ表示。
SSLでは不可。
公式サイトでは簡単に取得可能。
取得可能。ただし、携帯側でon設定が必要。 取得可能。ただし、携帯側でon設定が必要。 ない。 ない。
※iモードブラウザ2.0のUserAgentは機種により1,800種類以上あります(2010/6月現在)。ドコモの70%はまだクッキーが使えません。携帯全体では60%以上が使用可能。携帯の利用状況⇒cookie有効状況

ドコモでは公式サイトでない場合は固体識別番号やユーザIDの取得が簡単ではありませんが、反面これまではリファラーを出さないものが多く、その場合はリファラースパムの心配はありませんでした。AUやSoftBankでは固体識別番号やユーザIDを取得できますが(携帯側で番号通知がonになっている必要がある)、反面リファラースパムの危険性があります。そこで、固体識別番号やユーザIDが取得できる場合にはそれを利用するという考えはある程度有効と思われます。

【PCtoMobile以上の場合】
さて、クッキーが使える携帯が増えてきました。同時にPC並みの性能を持つiPhoneやスマートフォンも無視できなくなりました。それで、クッキーが使える場合にはクッキーを使うのが最善です。機種の判別によってではなく、実際にクッキーが使えるか否かをプログラムの方でテストして自動判定する方が簡単でしかも確実です。クッキーが使えない場合は上記のURL埋め込みの方法で行ないます。PCtoMobile、PCtoMobile2、PCtoMobile-U、Contents-Cart、Contents-Mall、Multi_Mail_Formで携帯のクッキーの利用を可能にし、iPhone、Android搭載スマートフォンにも対応させました。

ここまでをまとめるとこうなります。(携帯のクッキーの使用はPCtoMobile以上になります)
【1】クッキーが使える場合(クッキーが使える機種で、かつクッキーがonの設定の場合)
  暗号化されたパスワードをクッキーで受け渡す。この場合、URLは下記のようになります。
  http://*********.cgi?idname=guest&pass=secret

※guestやsecretはどんな単語でも良いのですが、URL埋め込みではなくクッキーで受け渡しているということを表しています。

【2】クッキーが使えない場合(クッキーが使えない機種又はクッキーがoffの設定の場合)
  暗号化されたパスワードをURL埋め込みで受け渡す。この場合、URLは下記のようになります。
  http://*********.cgi?idname=******&pass=(ハッシュ値80桁)

クッキーを使うメリットはセキュリティの面だけでなく、むしろ、固体識別番号やユーザIDを使わなくても簡単にログインできるようになるという点にこそあります。ショッピングカートの場合これは大きなメリットになります。わざわざログインしなくても済むなら購買意欲も高まるからです。ログインの際に「会員IDとパスワードを保存する」にチェックした場合はクッキーの有効期限は90日に設定してあります。携帯の場合、本人だけが使用するということを前提に考えることができます。それで、クッキーの有効期限は長く取ることができるのです。もちろん、ログアウトすることができますし、チェックしない場合はブラウザーを閉じるまでになります(ただし、AUの有効期限は1日となります)。

※パスワードをUserAgent、識別番号、時間的な情報などを使って暗号化し、かつ、IDとパスワードの引渡しをクッキーとURL埋め込み方式とを自動で切り替えて行なう方式を使った、上記のログイン方式は特許出願中です。

※SSLではsecureモードで、非SSLでは非secureモードで書き込むように、クッキーのsecureモードの自動切換え機能を搭載しています。⇒SSLの設定手順

※FireFoxを使うと、PCから携帯ショッピングカートをテストすることができます。iPhone、Android搭載スマートフォンのテストもできます。UserAgentをいろいろ変えてテストしてみてください。⇒User Agent Switcher  ⇒サンプル (ドコモの場合は、「iモードHTMLシミュレーター」を使った方がいいようですね。⇒ 携帯やスマートフォンサイトのテストの方法


携帯対応SSLショッピングカートの管理のセキュリティ対策
管理プログラムはクッキーにより管理者用パスワードの認証を行います。これにより、リファラースパムの危険性はありません。この認証は管理プログラムが呼び出されるたびに毎回行なわれます。

クッキーの有効期間はすべてのブラウザーを閉じるまでになっていますが、ログアウトすることを忘れないでください。この点は、他の人のPCで管理画面を使うときには特に注意が必要です。

また、管理者用のパスワードを暗号化(ハッシュ化)することにより、管理用のファイルが見られてしまった場合でも簡単にはパスワードを特定することができません。しかし、パスワードを定期的に変更することはいつでも良い方法です。

【注意】管理者用のパスワードを1234以外の値に設定して更新すると暗号化されます。

パスワードの桁数はセキュリティと関係があります。英字(大文字、小文字区別有)+数字で8桁のパスワードを解読する場合、最大50年かかるという報告があります。一方、英字4桁(大文字、小文字区別無)のパスワードは3秒で解析されてしまうそうです。ですから、簡単なパスワードを用いるとそれだけでシステムは脆弱なものとなってしまうのです。

また、IPアドレスが固定の場合はIPアドレスのチェック機能も付いていますので、セキュリティを一層強固にできます。IPアドレスは複数設定できます。しかし、この機能は必ずしも使わなければならないというわけではありません。パスワードを適切に管理することの方が重要なのです。

携帯対応SSLその他のセキュリティ対策
ショッピングカートのセキュリティには、プログラムのセキュリティのほかに、データファイルのセキュリティ、通信回線のセキュリティがあります。それぞれ下記をご覧ください。
携帯対応SSLセキュリティ関連リンク



Copyright (C) 2012  WEBインベンター All rights reserved.