質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

4870閲覧

ショッピングカートのセキュリティについて

seijiro7777

総合スコア17

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

5クリップ

投稿2015/02/08 02:12

編集2015/02/08 05:44

PHPでショッピングカートを作ろうと思っています。

ショッピングカートを作成する際にセキュリティ面で必須でやっておかなくてはいけない事を教えて欲しいです。

もちろんSSLを使用し、HTTPSで購入者情報を通信しますが、それだけでは不十分でしょうか。
また、データベース(MySql)に顧客情報をそのまま保存するのは危険なのでしょうか。

カード決済や、コンビニ決済に関しては、決済代行業者に依頼する予定ですので、クレジットカードに対する情報は保存しません。

購入者の名前や住所、電話番号など履歴をDBに残すため個人情報の漏洩を懸念しています。

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
munyaX

総合スコア783

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seijiro7777

2015/02/09 02:58

ポイントをわかりやすく列挙していただきありがとうございます。 大変参考になります。 OSのインストールから構築しましたので、だいたいの項目はクリアしているように思いますが、いくつか気になる点もありますね。 時間をかけて1つ1つ再チェックしたいと思います。 100%は無理でも出来る事はやっておかないとダメですよね。 モヤモヤしていた頭がスッキリしました。 ありがとうございました。
guest

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seijiro7777

2015/02/09 02:47

参考になります。 やはりMySQLに侵入されない事が一番のポイントとなるわけですね。 そのあたりを再チェックしてみます。 ありがとうございました。
guest

0

初めまして。

技術的な注意点では無いのですが、ECサイト構築にあたってはセキュリティコード(CVCまたはCVV)をDBに保存してはいけないというルールがあります。(また、商取引に関する知識も必要かと)

WEB+DB PRESSのvol.76でWeb決済の詳しい特集があるので、そちらを一読されてみてはどうでしょうか。
もし、決済で不安であれば購入者が限定されてしまいますが、PayPalのビジネスアカウントを取得してPayPalでの支払いにすれば、セキュリティに関する敷居は大分低くなると思います。(こちらも上記、雑誌の特集に掲載されています。)

あと、PHPだとEC-CUBEというECサイト構築に特化したフレームワークがあります。
色々と制限があるので思ったような作りにできないかもしれませんが、一から作るよりが楽かと思います。
ただ、数年前に私が利用した時は不具合も多く個人的に修正が多々ありました...ですのである程度PHPのコーディングスキルが要求されると思います。

以上、ご参考までに

投稿2015/02/08 03:25

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seijiro7777

2015/02/08 05:40

早速回答ありがとうございます。 質問が説明不足で申し訳ありません。 実際のカード決済や、コンビニ決済に関しては、PayPalと、決済代行業者に依頼する予定ですので、クレジットカードに対する情報はこちらでは保存しません。 さすがにそれは怖すぎるので。 私が心配しているのは、購入者の名前や住所、電話番号など履歴をDBに残すため個人情報の漏洩を懸念しています。 サイトの都合上EC-CUBEなどは利用しない予定です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問