質問するログイン新規登録

質問編集履歴

4

お礼を書き加えました

2017/06/16 10:48

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,7 @@
1
+ ご意見ありがとうございました。
2
+ 次に進もうと思います。
3
+
4
+ 以下、質問です。
1
5
  タイトルの通り、「気付けばプロ並PHP」という書籍をおわらせました。次はセキュリティに関して覚えた方がいいと言われたこともあり、「体系的に学ぶ、安全なWebアプリケーションの作り方」(以下徳丸本)も買ってきて少し読みました。
2
6
  ですが、「気付けばプロ並」のほうはパスワードハッシュなどが現在推奨されないものである事などを指摘されたので、「現行の、セキュリティ面などにおいても適切な」コーディングを知りたいと思いました。
3
7
  その上で、徳丸本を終わらせたらいわゆる「即戦力

3

文章の推敲

2017/06/16 10:48

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
  その上で、徳丸本を終わらせたらいわゆる「即戦力
4
4
  」として仕事ができるのでしょうか?
5
5
  (仕事になるレベルでの知識が得られるサイトも教えていただけたら嬉しいです)
6
- スマホからの投稿なので、疑問に思ったコードを追記しま
6
+ 先ほどはスマホからの投稿なので後から追記しました
7
7
  pro_list.php
8
8
  ```
9
9
  <?php

2

書いたコードの追記と、疑問点の追記

2017/06/11 12:49

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -3,4 +3,272 @@
3
3
  その上で、徳丸本を終わらせたらいわゆる「即戦力
4
4
  」として仕事ができるのでしょうか?
5
5
  (仕事になるレベルでの知識が得られるサイトも教えていただけたら嬉しいです)
6
- スマホからの投稿なので、疑問に思ったコードを追記します。
6
+ スマホからの投稿なので、疑問に思ったコードを追記します。
7
+ pro_list.php
8
+ ```
9
+ <?php
10
+
11
+ session_start();
12
+ session_regenerate_id(true);
13
+ if(isset($_SESSION['login'])==false)
14
+ {
15
+ print 'ログインされていません<br />';
16
+ print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>';
17
+ exit();
18
+ }
19
+ else
20
+ {
21
+ print $_SESSION['staff_name'];
22
+ print 'さんログイン中<br />';
23
+ print '<br />';
24
+ }?>
25
+
26
+ <!DOCTYPE html>
27
+ <html>
28
+ <head>
29
+ <meta charset="UTF-8">
30
+ <title>ろくまる農園</title>
31
+ </head>
32
+ <body>
33
+
34
+ <?php
35
+
36
+ try{
37
+ $dsn = 'mysql:dbname=shop;host=localhost;charset=utf8';
38
+ $user = 'root';
39
+ $password= '';
40
+ $dbh = new PDO($dsn,$user,$password);
41
+ $dbh -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
42
+
43
+ $sql = 'SELECT code, name,price FROM mst_product WHERE 1';
44
+ $stmt = $dbh->prepare($sql);
45
+ $stmt->execute();
46
+
47
+ $dbh = null;
48
+
49
+ print '商品一覧<br /><br />';
50
+
51
+ print '<form method="post" action="pro_branch.php">';
52
+ while(true){
53
+ $rec = $stmt -> fetch(PDO::FETCH_ASSOC);
54
+ if($rec==false){
55
+ break;
56
+ }
57
+ print'<input type="radio" name="procode" value="'.$rec['code'].'">';
58
+ print $rec['name'].'---';
59
+ print $rec['price'].'円';
60
+ print'<br />';
61
+ }
62
+ print '<input type="submit" name="disp" value="参照">';
63
+ print '<input type="submit" name="add" value="追加">';
64
+ print '<input type="submit" name="edit" value="修正">';
65
+ print '<input type="submit" name="delete" value="削除">';
66
+
67
+ print '</form>';
68
+ }
69
+
70
+
71
+ catch(Exception $e){
72
+ print 'ただいま障害発生中です。ご迷惑おかけします。';
73
+ exit();
74
+ }
75
+
76
+ ?>
77
+
78
+ <br />
79
+ <a href="../staff_login/staff_top.php">トップメニューへ</a><br />
80
+ </body>
81
+ </html>
82
+ ```
83
+ staff_branch.php
84
+ ```
85
+ <?php
86
+
87
+ session_start();
88
+ session_regenerate_id(true);
89
+ if(isset($_SESSION['login'])==false)
90
+ {
91
+ print 'ログインされていません<br />';
92
+ print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>';
93
+ exit();
94
+ }
95
+ else
96
+ {
97
+ print $_SESSION['staff_name'];
98
+ print 'さんログイン中<br />';
99
+ print '<br />';
100
+ }?>
101
+
102
+ <!DOCTYPE html>
103
+ <html>
104
+ <head>
105
+ <meta charset="UTF-8">
106
+ <title>ろくまる農園</title>
107
+ </head>
108
+ <body>
109
+
110
+ <?php
111
+
112
+ try{
113
+ $dsn = 'mysql:dbname=shop;host=localhost;charset=utf8';
114
+ $user = 'root';
115
+ $password= '';
116
+ $dbh = new PDO($dsn,$user,$password);
117
+ $dbh -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
118
+
119
+ $sql = 'SELECT code, name,price FROM mst_product WHERE 1';
120
+ $stmt = $dbh->prepare($sql);
121
+ $stmt->execute();
122
+
123
+ $dbh = null;
124
+
125
+ print '商品一覧<br /><br />';
126
+
127
+ print '<form method="post" action="pro_branch.php">';
128
+ while(true){
129
+ $rec = $stmt -> fetch(PDO::FETCH_ASSOC);
130
+ if($rec==false){
131
+ break;
132
+ }
133
+ print'<input type="radio" name="procode" value="'.$rec['code'].'">';
134
+ print $rec['name'].'---';
135
+ print $rec['price'].'円';
136
+ print'<br />';
137
+ }
138
+ print '<input type="submit" name="disp" value="参照">';
139
+ print '<input type="submit" name="add" value="追加">';
140
+ print '<input type="submit" name="edit" value="修正">';
141
+ print '<input type="submit" name="delete" value="削除">';
142
+
143
+ print '</form>';
144
+ }
145
+
146
+
147
+ catch(Exception $e){
148
+ print 'ただいま障害発生中です。ご迷惑おかけします。';
149
+ exit();
150
+ }
151
+
152
+ ?>
153
+
154
+ <br />
155
+ <a href="../staff_login/staff_top.php">トップメニューへ</a><br />
156
+ </body>
157
+ </html>
158
+
159
+ ```
160
+ pro_add_check.php
161
+ ```
162
+ <?php
163
+
164
+ session_start();
165
+ session_regenerate_id(true);
166
+ if(isset($_SESSION['login'])==false)
167
+ {
168
+ print 'ログインされていません<br />';
169
+ print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>';
170
+ exit();
171
+ }
172
+ else
173
+ {
174
+ print $_SESSION['staff_name'];
175
+ print 'さんログイン中<br />';
176
+ print '<br />';
177
+ }?>
178
+
179
+ <!DOCTYPE html>
180
+ <html>
181
+ <head>
182
+ <meta charset="UTF-8">
183
+ <title>ろくまる農園</title>
184
+ </head>
185
+ <body>
186
+
187
+ <?php
188
+
189
+ //if (isset($_POST["name"]) &&
190
+ // isset($_POST["pass"]) &&
191
+ // isset($_POST["pass2"])
192
+ // ) {
193
+ require_once('../common/common.php');
194
+
195
+ $post=sanitize($_POST);
196
+ $pro_name = $post["name"];
197
+ $pro_price = $post["price"];
198
+ $pro_gazou = $_FILES["gazou"];
199
+
200
+
201
+
202
+ // }
203
+ if($pro_name == '' ){
204
+ print '商品名が入力されていません<br />';
205
+ }
206
+ else
207
+ {
208
+ print '商品名:';
209
+ print $pro_name;
210
+ print '<br />';
211
+ }
212
+
213
+ if(preg_match('/^[0-9]+$/',$pro_price)==0)
214
+ {
215
+ print '価格をきちんと入力してください<br />';
216
+ }
217
+ else
218
+ {
219
+ print '価格:';
220
+ print $pro_price;
221
+ print '円<br />';
222
+ }
223
+
224
+ if($pro_gazou['size'] > 0)
225
+ {
226
+ if($pro_gazou['size'] > 1000000)
227
+ {
228
+ print '画像が大きすぎます';
229
+ }
230
+
231
+ else
232
+ {
233
+ move_uploaded_file($pro_gazou['tmp_name'],'./gazou/'.$pro_gazou['name']);
234
+ print '<img src="./gazou/'.$pro_gazou['name'].'">';
235
+ print '<br />';
236
+ }
237
+ }
238
+
239
+
240
+
241
+
242
+ if($pro_name=='' || preg_match('/^[0-9]+$/',$pro_price)==0 ||$pro_gazou['size']>1000000)
243
+ {
244
+ print '<form>';
245
+ print '<input type="button" onclick="history.back()" value="戻る">';
246
+ print '</form>';
247
+ }
248
+
249
+ else
250
+ {
251
+ print '上記の商品を追加します';
252
+ print '<form method="post" action="pro_add_done.php">';
253
+ print '<input type="hidden" name="name" value="'.$pro_name.'">';
254
+ print '<input type="hidden" name="price" value="'.$pro_price.'">';
255
+ print '<input type="hidden" name="gazou_name" value="'.$pro_gazou['name'].'">';
256
+ print '<br />';
257
+ print '<input type="button" onclick="history.back()" value="戻る">';
258
+ print '<input type="submit" value="OK">';
259
+ print '</form>';
260
+
261
+ }
262
+
263
+
264
+
265
+ ?>
266
+
267
+ </body>
268
+ </html>
269
+
270
+ ```
271
+ 見直してすぐに疑問だったところ二つのファイルを挙げさせてもらいます。
272
+ ➀SQLやパスワードのやり取りをする上でこれで安全なのか知りたいです。
273
+ ➁他のファイルなのですが、使用者側のログイン・会員登録・削除と管理側のページが行き来できる事に危険性はないのか
274
+ ➂preg_match で、半角英・数字を扱う文の書き方を教えていただきたいです。

1

2017/06/11 12:19

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -2,4 +2,5 @@
2
2
  ですが、「気付けばプロ並」のほうはパスワードハッシュなどが現在推奨されないものである事などを指摘されたので、「現行の、セキュリティ面などにおいても適切な」コーディングを知りたいと思いました。
3
3
  その上で、徳丸本を終わらせたらいわゆる「即戦力
4
4
  」として仕事ができるのでしょうか?
5
- (仕事になるレベルでの知識が得られるサイトも教えていただけたら嬉しいです)
5
+ (仕事になるレベルでの知識が得られるサイトも教えていただけたら嬉しいです)
6
+ スマホからの投稿なので、疑問に思ったコードを追記します。