ショッピングカートのセキュリティ対策 |
脆弱性のないショッピングカートを提供し、安心してお店の運営が行なえるようにしたいと考えています。それで、当社のショッピングカート(SPシリーズ)のセキュリティ対策についてお知らせしたいと思います。
セキュリティ対策として一般的に取り上げられている中で、ショッピングカートに関係しているのは主に次の2つです。
- XSS(クロスサイトスクリプティング)
- リファラースパム
XSS脆弱性は、特殊文字「<」「>」「&」「"」「'」を適切に処理すること(サニタイジング)により回避できます。これによりクッキーのハイジャック等のスクリプト混入を排除できるようにしてあります。
リファラースパム対策としてはIDやパスワードなど重要な情報はクッキーで受け渡すようにしました。それで、URLへの埋め込みはありませんから、リファラースパムの心配はありません。クッキーの有効期限はログアウト又は全てのブラウザーを閉じるまでに設定してあります。ログインの際に「会員IDとパスワードを保存する」にチェックした場合は90日間がクッキーの有効期間となります(楽天と同じ)。
ショッピングカートの場合、クッキーの有効期間は売り上げに関係していますからあまり短くはできません。ログアウト又はブラウザーを閉じる前にセッションが切れるということも望ましくありません。それは、せっかく来店したお客さんを追い返すようなものだからです。
【注】XSSなどの用語に関しましてはこのページの最後に掲載したサイトを参考にしてください。
|
会員パスワードの暗号化 |
データが何らかの事故等で流出した場合を想定して、パスワードが暗号化(ハッシュ化)してあれば一層安心できます。
最新バージョンでは、暗号化にSHA512を採用しています。SHA512は、電子政府推奨暗号リスト、及び、セキュリティ強度要件の基本設定方針によれば、2070年まで利用可能とされています。もちろん、これは電子政府システムに適用されるもので、一般のシステムで求められている訳ではありません。しかし、この基準を一般のシステムでも参考にできます。
さて、パスワードはハッシュという方法で暗号化され保存されていますが、そうした暗号(ハッシュ)も年々突破されつつあります。コンピュータの計算速度の向上により総当り攻撃も8文字の英数字であれば1日程度で解読できるようです。こうした状況を踏まえ、現時点での最善策は以下の2つであると言われています。
(1)ユーザーごとに異なるソルトを使い20文字以上を確保(レインボーテーブル対策)
(2)ストレッチング
それで、ショッピングカートで、ユーザーごとに異なるソルトを使用すると共に、ストレッチングを導入しました。ストレッチングとはハッシュ値の計算を数千回〜数万回繰り返すことにより、計算速度を遅くする方法です。ハッシュ化する場合は、攻撃者に全ての情報が知られてしまってることを前提として考えますが、その場合これは有効な方法の一つです。攻撃者はどんな技術を使っても解読に時間が必要となってしまうのです。ストレッチングを1万回行うと1日でできることも1万日(30年近く)かかることになります。
さて、このパスワードの暗号化(ハッシュ化)は不可逆暗号で、パスワードの再発行ができません。それで、この場合、仮パスワード(10桁以上のランダム英数字)を作成して送信するという手法を用いています。会員は、仮パスワードでログインしてから、パスワードを変更して使うことになります。
※旧バージョンで用いてきたSHA1は、電子政府推奨暗号リストでは運用監視暗号リストに掲載されており、徐々に移行することが勧められています。新バージョンでは、出来るだけこれまでの暗号化されたデータも使えるようになっています。その場合、会員登録したり、パスワードを変更した時点で新たな方式で暗号化され保存されます。それで、バージョンUP後、会員にパスワードの変更を勧めるのはよいことです。その際、パスワードには英(大文字と小文字)数字を全て使い最低8文字以上にすることも勧めて下さい。それと共に辞書攻撃などがしにくく、かつ推測しにくいパスワードにするようにもお知らせください。
※ログインをはじめ、重要な情報はPOSTのみを受け付けるようになっています。そして、パスワードなど会員情報の変更時にはパスワードの再入力が必要となります。
|
トークンを発行してログインの認証を行う機能 |
ショッピングカートの会員制機能において、ログイン時に、ログイン状態の保持期間をユーザーが指定できるログイン方式を搭載しました。
通常、会員制のログイン方式ではクッキー技術が用いられ、あらかじめクッキーの有効期間が一つに決められています。しかし、クッキーの有効期間をどのぐらいに設定するかはシステムの特徴やユーザーのPC環境と使用状況により異なってきます。
そこで、システム側で幾つかの選択肢を用意しておき、ユーザーがログイン時に選択できるようにしました。こうすることにより、システム開発者はあらかじめシステムの特徴に合わせて適切な選択肢を用意でき、同時に、ユーザーは自分の利用状況に合わせた最適なログイン保持期間を選択できます。さらにこれは、共有のPCを使う場合でもログイン状態の保持期間を意識した利用につながり、セキュリティ面でも効果が期待できます。
また、上記機能を搭載するに際して、トークンを発行してログインの認証を行う機能を導入しました。トークンはランダムなハッシュ値で、10分ごと(アクセス時)に更新されます。また、トークンには上記のログイン保持期間と同じ有効期限があります。「ログイン状態を保持する」にチェックしなかった場合の有効期限はデフォルトでは1時間となります。
このトークンの発行機能を導入することでユーザーのログイン状態を管理者側で管理することができるようになり、下記のことが可能となります。
1)「ログイン状態を保持する」にチェックしなかった場合、最終アクセスから一定の時間でログアウトします。
2)複数の端末(最大10個)からログインしている場合、一つの端末でログアウト、又は会員情報の変更をすると、全ての端末でログアウトできます。
【注意】バージョンUPでこの機能を導入する場合、これまでログインインしていたユーザーは初回にのみパスワードの再入力が求められます。
上記の機能を使うために、システム設定【4】で、ログイン状態を保持する期間(日数)を複数指定できるようになっています。さらに、トークン発行機能に関する設定ができます。
この新ログイン方式は、PCtoMobile以上のショッピングカートで採用いたしました。
サンプルはこちらをご覧下さい。
⇒ https://shoppingcart-cgi.net/sample/PCtoMobile2/
また、 ショッピングカートPCtoMobile2において、「ログイン状態を保持する」を選んだ場合に、ブラウザーを閉じ再び開いた時に、ログイン状態を保持しつつパスワードを再確認する機能を搭載しました。
ブラウザーを閉じ再び開いた時に、パスワードの再確認が必要な機能は下記の通りです。
(1)会員情報表示
(2)会員情報変更
(3)会員情報削除
(4)注文履歴
(5)会員窓口
(6)送付先リスト
ログイン状態は指定した日数保持されており、お気に入り商品の表示と商品の購入手続きとお問合せはパスワードの再確認なしに可能です。
このパスワード再確認機能はPCtoMobile2のPCカートにのみ搭載されており、システム設定【4】でこの機能を有効にできます。
サンプルはこちらをご覧下さい。
⇒ http://wb-i.kir.jp/sample/PCtoMobile2/
|
ショッピングカートの管理のセキュリティ対策 |
管理プログラムはクッキーにより管理者用パスワードの認証を行います。この認証は管理プログラムが呼び出されるたびに毎回行なわれます。
クッキーの有効期間はすべてのブラウザーを閉じるまでになっていますが、ログアウトすることを忘れないでください。この点は、他の人のPCで管理画面を使うときには特に注意が必要です。
また、管理者用のパスワードを暗号化(ハッシュ化−適切なソルトを用い、ストレッチングも採用)することにより、管理用のファイルが見られてしまった場合でも簡単にはパスワードを特定することができません。しかし、パスワードを定期的に変更することはいつでも良い方法です。
【注意】管理者用のパスワードを1234以外の値に設定して更新すると暗号化されます。
パスワードの桁数はセキュリティと関係があります。英字(大文字、小文字区別有)+数字で8桁のパスワードを解読する場合、最大50年かかるという報告があります。一方、英字4桁(大文字、小文字区別無)のパスワードは3秒で解析されてしまうそうです。ですから、簡単なパスワードを用いるとそれだけでシステムは脆弱なものとなってしまうのです。(パスワードを1文字増やすだけで、解読される時間は約
100 倍 、2文字増やせば 10,000 倍になるそうです。)
また、最新版では、トークンを発行してログインの認証を行う機能も搭載しおり、最終アクセスから2時間(デフォルト)で自動的にログアウトします。(システム設定【1】でこの期間を設定できます。)
また、IPアドレスが固定の場合はIPアドレスのチェック機能も付いていますので、セキュリティを一層強固にできます(ただ、IPアドレスは変化することがあります)。管理メニュー画面の下のほうにIPアドレスと設定方法が記されています。パスワードに対する昨今の攻撃を考えると、可能ならIPアドレスを制限することは賢明です。
※最新バージョンでは、暗号化にSHA512を採用しています。
|
個人情報を含むデータの暗号化 |
年々、個人情報保護法も厳しくなってきています。2016年にEUでGDPR(一般データ保護規則)が制定されました。これは大変厳しいもので、違反すると2000万ユーロの罰金が科されます。そして、個人データの暗号化はGDPRの要求の1つです。日本国内では、現在、そこまでは要求されていませんが、個人データが流出した場合には届け出が求められています。それで、個人情報が暗号化されていれば安心できます。というのも、『高度な暗号化』によって保護されていれば、その届け出も不要とされているからです。
それで、PCtoMobile2 Ver.23.00をグレードUPして、個人データを暗号化してサーバー内に保存できるようにした、PCtoMobile2-Crypt(暗号化版)ver.24.00をリリースいたしました。
サンプル:
https://perl-5-32.sakura.ne.jp/PCtoMobile2_Crypt/
PCtoMobile2-Crypt(暗号化版)では、電子政府推奨暗号リストで2070年まで利用可能とされているAES256(共通鍵暗号)を採用しました。perlモジュールは下記のものが利用できます。
高速だがインストールが必要なモジュール:
Crypt::OpenSSL::AES
Crypt::Camellia
Crypt::Rijndael
低速だがインストール不要なモジュール(標準内臓):
Crypt::Camellia_PP
Crypt::Rijndael_PP
※デフォルトはCrypt::Rijndaelです。さくらインターネットでは、Crypt::Rijndaelがインストールされています。
暗号化されるのは下記のフォルダ内のデータです。
list (会員データ)
list2 (住所録) mypage (ほしい物リストデータ)
log (注文ログ)
from_log (お問い合わせデータ)
result (決済データ)
symbol2/data (Symbolの注文識別データ)
ripple2/data (Rippleの注文識別データ)
analyzer/log (アクセス解析データ)
affiliate/aff_list (アフィリエイト会員データ)
利用を開始する前に、同梱されているreadme.txtをお読みになり、必要な設定をしてください。
さて、暗号化はできてもそれだけでは安全ではありません。共通鍵を適切に保管することが必要となります。しかし、これを完全に行うことは難しいことです。そのような場合に役立つ方法の一つは、鍵を時々変更することです。それだけでセキュリティはかなり向上します。
共通鍵を変更するには、まず、すべてのデータを復号する必要があり、その後、鍵を新しくしてから、再び、すべてのデータを暗号化するという手順が必要になります。それで、PCtoMobile2-Crypt
に、一括暗号化・復号プログラムを標準で装備いたしました。このプログラムで下記のことができます。
(1)データの暗号化の状態を確認
(2)データを一括暗号化
(3)データを一括復号
これを用いると、旧バージョンの平文のデータも一括暗号化して利用することができます。
このプログラムを活用して、必要なタイミングで共通鍵を変更するなら、セキュリティを適切に保つことができます。さらに、データが流出してしまった時にも、適切な対応を取ることができるでしょう。
※PCtoMobile2-Cryptには、標準で下記のプログラムが同梱されています。
一括暗号化・復号プログラム
在庫・価格管理プログラム STOCK
SYMBOL決済の着金通知プログラム SymbolCheck
リップル決済の着金通知プログラム RippleCheck
NEM決済の着金通知プログラム NEMCHECK
リップルによる送金&購入システム Send&Buy
SYMBOLによる送金&購入システム Send&Buy
|
その他のセキュリティ対策 |
ショッピングカートのセキュリティには、プログラムのセキュリティのほかに、データファイルのセキュリティ、通信回線のセキュリティがあります。それぞれ下記をご覧ください。
|
スパムアクセスへの対策 |
サーバ内のファイルは日に何百回となくアクセスを受けています。通常のネットの閲覧によるアクサセや検索エンジンのクローラーによるアクセスだけでなく、それ以上に悪意のあるプログラムによるスパムアクセスをたくさん受けています。通常は様々なエラーチェックにより、例えば商品の注文の最終段階にまでは至りません。最終段階まで至る確率は雷に当たる確率のようなものです。しかし、そうしたアクセスが何百万回となく繰り返されるうちにそれが現実のものとなる時がやってきます。
そうしたスパムアクセスのほとんどは海外からのものです。
それで、当社のショッピングカートでは、スパムアクセスへの対策を施しました。まず、海外からのスパムアクセスを防ぐためのチェック機能を標準で搭載いたしました。
それに加えて、より完全な形でスパムアクセスを撃退するスパムフィルター機能(オプション)をPCtoMobile以上で装備いたしました。(PCtoMobile Ver.16、PCtoMobile2 Ver.17、PCtoMobile-Unicode
Ver.17、Contents-Cart Ver.16、Contents-Mall Ver.17)
【スパムフィルター機能】
(1)JavaScriptを使ったプログラム攻撃の防御
(2)フォーム偽装の発見
このスパムフィルター機能を利用するにはライセンスが必要になります。お求めはこちらからできます。
⇒スパムフィルターのライセンスの購入
※現在のところ、これでスパムアクセスは100%撃退できるといわれています。
※フォームの偽装とは、注文フォームなどをコーピーして複製し、自社のサーバにUPしてPOST送信するものです。この場合は、アクセス元のドメインが異なるので発見できます。もっとも、当社のカートの場合は商品価格などの商品情報をデータとしてサーバ内に持っていますので、フォームを偽装されても実害はありません。
|
セキュリティ関連リンク |
|