不特定多数の方に開放したホームページ上で販売を行うネットショップ・オンラインショップにおける電子商取引では、ユーザーの入力情報を保護する事が必須であり、更に外部からの攻撃に備え十二分な対策を講じる必要があります。
更に、ハイパーリンク・アンカーリンクでショッピングカートCGIプログラムを呼び出すもの、URL直接入力で呼び出す事ができるものは注意が必要です。
更にはURLを直接指定してもアクセスできないようにすると安全性が増します。
ちなみにURLの直接指定を禁止するという事は、ブラウザのURL入力欄からの入力によるCGIファイル指定を禁止すると同時にHTMLタグでアンカーリンク(<a href=""></a>)を設定してもアクセスできないという事を意味します。
この為、当然、商品・サービス画面などからCGIをコールする場合でもアンカーによる呼び出しはしない仕様にする必要があります。
それじゃ不便じゃん!と思われる方もいらっしゃるかもしれませんが、これを許容すると、他のHTMLファイル同様、全く違うドメインにあるhtmlからでも呼び出しが可能となってしまうからです。
一部のレンタルサーバは、他ドメインのCGIの呼び出しを禁止する運用をしていますが、すべてのレンタルサーバがそうであるとは限りませんし、独自にサーバを運営している場合は、運営者の自由です。
それでも、なぜ他のドメインからCGIが呼びだされたらいけないの?と思う人もいるかもしれませんが、悪意ある管理者が運営するウェブサイトからカートが予期していない操作をされる可能性を作ってしまう事、更にtelnetなどネットワーク上からもアクセスを許容する事になるので、ウェブサイトからの人的な操作よりもむしろ仕込まれた自動プログラムによる不正操作の方が脅威になります。
POSTでカートCGIが受け取る事を想定するデータは決まっているはずですが、これらを許容してしまうとカートCGIが想定外のデータを容易にカートCGIに渡す事ができてしまいます。
これを回避する為には、厳重な入力チェックとサニタイジングもさることながらURLの入力を禁止する事が有効です。
「GET」を利用禁止にするには、環境変数$ENV{'HTTP_METHOD'}を参照して[GET]である場合の処理を記述します。
この時、呼び出すCGIスクリプトファイルでmethodが[GET]である場合には、ウェブサーバが出力するHTTPステータスコードの存在しないファイルに相当する[ 404 Not Found ]、またはファイルアクセス禁止を意味する[ 403 Forbidden ]などを実装するのが有効でしょう(理由は後述のエラーメッセージの注意点に関連)。
1つはPOSTするCGIファイルのパーミッションを[ 700 ]に、そのCGIで[ use ][ require ]するファイルのパーミッションを[ 600 ]に設定することです。
もうひとつはサーバがレンタルで且つ、ウェブサーバがApacheであれば、.htaccessを設定する事になります。
自前のサーバでウェブサーバがApacheであれば.htaccessと違い設定を有効にする為に再起動は必要になりますが.httpd.confファイルを直接書き換える事がApacheでは推奨されています。
これはカートとして呼び出されるCGIファイルやCGIファイルが取り込むスクリプトファイルに直接アクセスされる事を防ぐための対策となり、取り込むスクリプトファイルのパスとファイル名などが何らかの手法で想定されてしまった場合でもURL直接入力をした場合、[ 403 Forbidden ]とエラー表示されます。
但し、ブラウザの「ソースの表示(view-source)」ではこれらの対策を講じてもCGIで生成したHTMLソースは表示されます。
例外として、この対策を講じたCGIが生成したHTMLソースに関しては、Google Chrome 3では「ソースの表示(view-source)」にも[ 403 Forbidden ]が表示されます。
ブラウザの挙動としてどちらが正確なのかは調べていません。
ちなみにCSS外部ファイル、Javascript外部ファイルを利用している場合には、パーミッションは[ 604 ]、[ 644 ]などとしないと[ 600 ]では適用されません。
>> SSL対応は必須
ショッピングカートに必要な品質確保する為の大前提の対策。
セキュリティを考える上でショッピングカートCGIの対策を講じただけでは不足です。
ショッピングカートCGIで利用する複数のファイルと公開するウェブサーバ上のセキュリティ設定とディレクトリ保護、ウェブサーバへのアップロード、ターミナルエミュレータ利用におけるセキュアな接続なども必要です。
また、ログインID、パスワードはセキュアなウェブサーバ、セキュアなFTPソフト、セキュアなターミナルエミュレータにおいても徹底管理が必須です。
ネット上でショッピング機能を利用する場合、「一連の操作をしているユーザー」を特定する為にはcookie/クッキーの設定が不可欠です。
ここまでのセキュリティは最低限必要であり、cookieの実装によりショッピングカートを一応組み込む事はできますが、残念ながら完全にセキュリティが確保されるわけではありません。
また、善意のアクセスの拒否か、またはセキュリティ確保の二者択一を迫られるケースもあります。