PHPでショッピングカートを作ろうと思っています。
ショッピングカートを作成する際にセキュリティ面で必須でやっておかなくてはいけない事を教えて欲しいです。
もちろんSSLを使用し、HTTPSで購入者情報を通信しますが、それだけでは不十分でしょうか。
また、データベース(MySql)に顧客情報をそのまま保存するのは危険なのでしょうか。
カード決済や、コンビニ決済に関しては、決済代行業者に依頼する予定ですので、クレジットカードに対する情報は保存しません。
購入者の名前や住所、電話番号など履歴をDBに残すため個人情報の漏洩を懸念しています。
宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
懸念される点は非常に多岐に渡り、本が一冊書けるレベルです。
もし目的が開発ではなくECサイトのオープンなのであれば、商用に提供されているASPなどを利用される方が良いかもしれません。
具体的な懸念点としては例えば以下になります。
◯サーバ(共通)
・サーバ上で必要ないソフトウェアが動いていないか
・サーバ上で必要ないポートが空いていないか
・Apache,MySQLなどサーバ用のソフトウェア、またPHPなどは最新か
・SSH、SFTPでのログインは強固なものになっているか
※IPアドレス等の制限、パスワードではなくRSA認証などを用いているか、
rootでのログイン禁止、必要のないユーザーでログインできるようになっていないか
◯DBサーバ
・WebサーバとDBサーバを分けている場合、
DBサーバはグローバルからアクセスできないようになっていることが望ましい
・MySQLにログインするユーザーは適切な権限(GRANT)が与えられているか
※ログイン元の制御なども含めて
◯Webサーバ
・Apacheで余計なhttpヘッダを出力していないか
※Webサーバや言語のバージョンは隠す
・適切なユーザーでApache等のWebサーバが動いているか
◯Webアプリ
・コマンドインジェクション、SQLインジェクション、XSS、CSRF等が行われないか確認しているか
・セッションハイジャックへの対策は十分か
・リダイレクト時、第三者のドメインへ自由に飛べるようになっていないか
※例えば location.php?url=http://www.google.com/ など。フィッシングの踏み台になる
・サーバ上の特定のファイルを、URLやパラメータから開けるようになっていないか
※例えば hoge.php?file=/path/to/bar.txt などとなっている
・ドキュメントルートに不要なファイルが置かれていないか
※よくニュースになっている個人情報の漏洩で多いパターン
・ログイン時など、ブルートフォースアタック(辞書攻撃)対策は行われているか
・ユーザーのパスワードがハッシュ化された状態で保存されているか
・本番環境では詳細なエラー内容が出力されないようになっているか
※開発者向けの情報が出てしまうと相手にヒントを与えることになる
◯メールサーバ
・SMTPサーバが誰にでも利用されるようになっていないか
※踏み台になる恐れがあり
寝ぼけた頭で思い出したまま羅列しているので他にももろもろあると思います。
この手の話ではお約束ではありますが、IPAがここらへんの話をまとめたドキュメントとチェックリストを公開してますので一読されると良いかと思います。
https://www.ipa.go.jp/security/vuln/websecurity.html
MySQL等のDBに個人情報を記録しているところはたくさんありますので、対応をしっかり行えば問題が起こる確率を減らすことは可能です。しかしゼロにすることは中々出来ません。例えばデータセンターのHDDを交換した際、廃棄予定のディスクがデータ毎盗難に合うといったことも実際に発生しニュースになりました。どこまでケアするか、運営者の意向次第ではありますが、何だかんだで毎度予期せぬ事態が起こり大変な目に会うものですw
がんばってください。
投稿2015/02/09 00:24
編集2015/02/09 01:10総合スコア783
0
質問に対する回答になっていなかったようで申し訳ございません。
情報漏洩としては1つはハックされる、もう1つは作業ミスで情報が漏れると言う事が考えられると思います。
ハックに関しては下記の対策が必要かと思います。
0. MySQLのセキュリティホール修正情報を日々チェックしてバージョンを上げる
0. 外部からMySQLに接続出来ないようにする
0. アクセスログの監視をする(ログインを何度も試みているアクセスがあるかとか)
0. MySQLに接続できるマシンおよびユーザーを限定する(MySQLのユーザー権限など)
0. SQLインジェクション対策をする
作業ミスに関しては作業手順書を作成して対応するしかないと思います。
↓MySQLに暗号化、複合化の仕組みがあるようです。
リンク内容
あとは、あまり有効では無いかも知れませんが独自暗号化ツールを作成して個人情報を暗号化してDBに登録するとか。(もちろん、暗号化および複合化の条件が第三者には分らないようにする必要があります。)
私が昔ECサイト構築した時(3、4年前)は特にその辺は暗号化せずに管理してましたよ。
そもそも、侵入されたら何をやっても意味が無いので、どれだけ侵入を妨げるかが有効な対策かと思います。(もちろんSQLインジェクション対策は必須です。)
投稿2015/02/08 06:11
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
初めまして。
技術的な注意点では無いのですが、ECサイト構築にあたってはセキュリティコード(CVCまたはCVV)をDBに保存してはいけないというルールがあります。(また、商取引に関する知識も必要かと)
WEB+DB PRESSのvol.76でWeb決済の詳しい特集があるので、そちらを一読されてみてはどうでしょうか。
もし、決済で不安であれば購入者が限定されてしまいますが、PayPalのビジネスアカウントを取得してPayPalでの支払いにすれば、セキュリティに関する敷居は大分低くなると思います。(こちらも上記、雑誌の特集に掲載されています。)
あと、PHPだとEC-CUBEというECサイト構築に特化したフレームワークがあります。
色々と制限があるので思ったような作りにできないかもしれませんが、一から作るよりが楽かと思います。
ただ、数年前に私が利用した時は不具合も多く個人的に修正が多々ありました...ですのである程度PHPのコーディングスキルが要求されると思います。
以上、ご参考までに
投稿2015/02/08 03:25
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/08 05:40
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/09 02:58