質問編集履歴

1

質問内容を1点(セキュリティに関して)に絞らせて頂きました。

2020/06/01 19:07

投稿

nedekee
nedekee

スコア4

test CHANGED
@@ -1 +1 @@
1
- 商品購入サイトにおけるセキュリティ及び購入処理
1
+ 商品購入サイトにおけるセキュリティ
test CHANGED
@@ -62,117 +62,21 @@
62
62
 
63
63
  ---
64
64
 
65
+
66
+
65
- 今はメインである商品購入機能を作っていて、そこで二点ほど悩んでおります。
67
+ 今はメインである商品購入機能を作っていて、購入処理の際のセキュリティ対策に関して悩んでおります。
68
+
69
+ 基本のhtmlspecialcharsやCSRF辺りは頭にあるんですが、
70
+
71
+ こうしたECサイト系におけるセキュリティ対策に明るくないので、ご教授頂けたら幸いです。
66
72
 
67
73
 
68
74
 
69
- ①セキュリティの観点での実装
70
-
71
- 基本のhtmlspecialcharsやCSRF辺りは頭にあるんですが、
72
-
73
- それ以外でのセキュリティ対策に明るくないので、ご教授頂けたら幸いです。
74
-
75
- CSRFはopenssl等はまだ扱えず、phpのhash関数とshaでとりあえず作っている状態です。
75
+ 因みにCSRFはopenssl等はまだ扱えず、phpのhash関数とshaでとりあえず作っている状態です。
76
76
 
77
77
  個人サイトなのでそこまで詳細には実装要らないのかなと思いつつ、今後現場レベル
78
78
 
79
79
  での知識運用を考えると、そこで妥協して良いのかなという気持ちもあります。
80
-
81
-
82
-
83
- ②購入処理
84
-
85
- 商品の購入処理ということで、カート機能を作り中なのですが、
86
-
87
- とりあえずで色々セッション変数に格納しすぎて、数が増えるばかりです。
88
-
89
- 各ページでどんなセッションが必要で、どのタイミングで破棄するのかなどで混乱しています。
90
-
91
- 下記は現在のセッション一覧です。
92
-
93
-
94
-
95
- 商品一覧ページのセッション
96
-
97
- ・商品DBから取得(商品id,値段,在庫)
98
-
99
- ・会員ID(ログインチェック)
100
-
101
- ・トークン情報(csrf用)
102
-
103
- 商品確認ページのセッション
104
-
105
- ・DBに保存されたカート履歴(注文id, 商品ごとの値段, 在庫)
106
-
107
- ・入力商品情報とDB情報の照合用商品情報(商品id, 商品ごとの値段, 在庫)
108
-
109
- ・入力注文情報(商品名,注文数,商品ごとの値段)
110
-
111
- ・会員ID(ログインチェック)
112
-
113
- ・トークン情報(csrf用)
114
-
115
- 購入完了ページのセッション
116
-
117
- ・会員ID(ログインチェック)
118
-
119
- ・トークン情報(csrf用)
120
-
121
- ・会員情報(完了メール送信に使用)
122
-
123
- ・入力注文情報(商品名,注文数,合計料金)
124
-
125
-
126
-
127
- 特に混乱しているのは、
128
-
129
- 商品一覧から商品をカートに入れた際の値の保持方法と破棄です。
130
-
131
- この時一つの同じフォームに対し、カートに入れるボタンが商品ごとにある為、
132
-
133
-
134
-
135
- ─イメージ────────────────
136
-
137
- <form action="conf.php" method="post">
138
-
139
- <select name= "a">
140
-
141
- // option valueの処理
142
-
143
- <input type="submit" name="cart" value="カートに入れる">
144
-
145
- <select name= "b">
146
-
147
- // option valueの処理
148
-
149
- <input type="submit" name="cart" value="カートに入れる">
150
-
151
- <select name= "c">
152
-
153
- // option valueの処理
154
-
155
- <input type="submit" name="cart" value="カートに入れる">
156
-
157
- </form>
158
-
159
- ─────────────────────
160
-
161
-
162
-
163
- aという商品だけをカートに入れると、他のBやCもフォームとして送られてしまいます。
164
-
165
- 最初は商品ごとにformタグを付けようと考えましたが、商品種類が増えた際にセッションが肥大化
166
-
167
- しないかを懸念しています。なので、何とか1つのformタグで済ませる方法が無いかを模索しております。
168
-
169
- また破棄に関しては、ブラウザを閉じてセッションが切れた後も、カートページに情報を
170
-
171
- 残すようにしたいのですが、この場合ブラウザを閉じられたらセッションを破棄し、
172
-
173
- ログ用テーブルに情報を保存、再度カートページにアクセスでログ用テーブルから取り出すという処理を考えています。
174
-
175
- これに関してPHPでの実装観点からいってご意見を賜りますようお願い申し上げます。
176
80
 
177
81
 
178
82