不特定多数の方に開放したホームページ上で販売を行うネットショップ・オンラインショップにおける電子商取引では、ユーザーの入力情報を保護する事が必須であり、更に外部からの攻撃に備え十二分な対策を講じる必要があります。
但し、レンタルサーバ利用者にもできる対策があります。
そこで重要になるのは、ファイルをアップロードする場合の安全なアップロード方法と各ファイルとこれらが格納されているディレクトリのパーミッション設定、それからサーバ上で作業をする為にターミナルエミュレータ(TeraTermなど)を利用する場合には、安全なものを利用する事です。
アップロードとターミナルエミュレータの利用においてセキュリティを意識するのは共にネットワーク上にファイルやコマンドが流れますが、これらが暗号化されずにそのまま流れていると盗み見の危険性があるからです。
アップロードしたファイルや格納するディレクトリでセキュリティを意識するのは、想定しない人々から想定しない方法で想定しない操作をなされる事を回避する為です。
サーバ上で直接ファイル作成を含む操作を行う事ができ、かつ画像などを使わない場合は別として、CGIにしろHTMLにしろローカルファイルを公開されているウェブサーバにアップロードする必要があります。
その際に利用されるのがFTPソフトですよね。
前述の対策を施したからCGIも万全、レンタルサーバも業界随一のセキュリティ対策が万全なサーバを選んだから大丈夫!と言えるでしょうか?
NOですよね、アップロードする際に盗聴・盗み見されてはせっかくの努力も無意味とまでは言いませんが、片手落ちだからです。
そこで重要なのがSSHやSSLを利用したセキュアなFTPソフトですが、前提としてウェブサーバがFTPS、SFTPなどに対応している必要があります。
セキュアなFTPソフトを入手し使いこなせるようになったら次は公開ウェブサーバ上にアップしたファイルとそれを格納するディレクトリのパーミッション設定です。
不正操作を防ぐ効果的な方法の1つとして、大切な情報を扱うスクリプトファイルやそのファイルを格納しているディレクトリを保護する事があります。
ネットショップでは不特定多数の人々がアクセスするのはブラウザですが、ブラウザからの入力であってもパーミッションを意識する必要があるのはもちろん、専用ではなく共有レンタルサーバであれば尚更、サーバ内からのアクセスを制限する為のパーミッションに配慮する必要があります。
一般にウェブサーバにファイルをアップロードしたり、viやEmacs等でサーバ上で作成したりすると[644]または未設定である[xxx]となります。
例えば、通常のファイルでも[644]ではなく、[User][Group][Other]の内、[Group]に当たる部分から全ての権限を削除する[0]を設定し、[604]とします。
[User]と[Other]については、ファイルの性質によってパーミッションを設定しますが、ショッピングカートプログラムとして呼び出すCGIファイルは、所有者である[User]に当たる部分を[7]とし[7xx](xは適宜設定)、更に[User]以外に読み取り、書き込み、実行の権限が不要であれば[700]とします。
この実行ビットを有効にしたファイルが存在するディレクトリのパーミッションにおける最も厳密な設定は[701]です。
これはファイルよりもディレクトリのパーミッションが優先されるのでディレクトリのパーミッションが[700]では実行ビットの立ったファイルが実行できない為です(パーミッション)。
これによってCGIを作成した自分とサーバを運営している管理者以外は、「プログラムが想定する手順を踏んで同ファイルにアクセスする」以外は、このファイルに対しては何もできなくなります。
しかし、ここで「プログラムが想定する手順を踏んで同ファイルにアクセスする」という点でプログラム自体に不備があると、
「プログラムで想定したように装ってブラウザやその他の方法でアクセスできてしまう」
事になりかねませんから前述のようにスクリプト自体の脆弱性をつぶす、スクリプトファイルにおける入力チェックとサニタイジングが必要という事になります。
ショッピングカートのCGIである場合、ファイル1つという事はまずないでしょうから、主たるCGIファイル以外に初期設定用ファイルやDBアクセス、ファイルアクセス用ファイル(perlであれば、[.pl]場合によっては[.cgi])等々といった複数のスクリプトファイルから成っていると思われますし、[Other]も書き込み可能なテキストファイルなどがある場合にもこれらのファイルも漏れなくパーミッションを設定します。
少なくともPerlではこれらの分割したファイルについては正しくrequireされていれば所有者である[User]であっても実行権限は不要であり、[User]が[7]である必要はありませんから通常の[644]、[Group]に権限が不要であれば[604]、もし[Other]にも権限は不要という場合には[600]とします(ファイルの用途によっては[User]の権限を更に絞り込む事が出来る場合もなくはありません)。
TeraTermなどローカルからTCP/IP接続でサーバを利用する事ができるターミナルエミュレータはSSH接続が可能なセキュアなものを利用する必要があります。
>> ログインIDとパスワードの管理を怠ると他のセキュリティが水の泡
ショッピングカートに必要な品質確保する為の大前提の対策。
セキュリティを考える上でショッピングカートCGIの対策を講じただけでは不足です。
ショッピングカートCGIで利用する複数のファイルと公開するウェブサーバ上のセキュリティ設定とディレクトリ保護、ウェブサーバへのアップロード、ターミナルエミュレータ利用におけるセキュアな接続なども必要です。
また、ログインID、パスワードはセキュアなウェブサーバ、セキュアなFTPソフト、セキュアなターミナルエミュレータにおいても徹底管理が必須です。
ネット上でショッピング機能を利用する場合、「一連の操作をしているユーザー」を特定する為にはcookie/クッキーの設定が不可欠です。
ここまでのセキュリティは最低限必要であり、cookieの実装によりショッピングカートを一応組み込む事はできますが、残念ながら完全にセキュリティが確保されるわけではありません。
また、善意のアクセスの拒否か、またはセキュリティ確保の二者択一を迫られるケースもあります。