質問編集履歴

4

お礼を書き加えました

2017/06/16 10:48

投稿

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

3

文章の推敲

2017/06/16 10:48

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  (仕事になるレベルでの知識が得られるサイトも教えていただけたら嬉しいです)
10
10
 
11
- スマホからの投稿なので、疑問に思ったコードを追記しま
11
+ 先ほどはスマホからの投稿なので後から追記しました
12
12
 
13
13
  pro_list.php
14
14
 

2

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

2017/06/11 12:49

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -9,3 +9,539 @@
9
9
  (仕事になるレベルでの知識が得られるサイトも教えていただけたら嬉しいです)
10
10
 
11
11
  スマホからの投稿なので、疑問に思ったコードを追記します。
12
+
13
+ pro_list.php
14
+
15
+ ```
16
+
17
+ <?php
18
+
19
+
20
+
21
+ session_start();
22
+
23
+ session_regenerate_id(true);
24
+
25
+ if(isset($_SESSION['login'])==false)
26
+
27
+ {
28
+
29
+ print 'ログインされていません<br />';
30
+
31
+ print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>';
32
+
33
+ exit();
34
+
35
+ }
36
+
37
+ else
38
+
39
+ {
40
+
41
+ print $_SESSION['staff_name'];
42
+
43
+ print 'さんログイン中<br />';
44
+
45
+ print '<br />';
46
+
47
+ }?>
48
+
49
+
50
+
51
+ <!DOCTYPE html>
52
+
53
+ <html>
54
+
55
+ <head>
56
+
57
+ <meta charset="UTF-8">
58
+
59
+ <title>ろくまる農園</title>
60
+
61
+ </head>
62
+
63
+ <body>
64
+
65
+
66
+
67
+ <?php
68
+
69
+
70
+
71
+ try{
72
+
73
+ $dsn = 'mysql:dbname=shop;host=localhost;charset=utf8';
74
+
75
+ $user = 'root';
76
+
77
+ $password= '';
78
+
79
+ $dbh = new PDO($dsn,$user,$password);
80
+
81
+ $dbh -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
82
+
83
+
84
+
85
+ $sql = 'SELECT code, name,price FROM mst_product WHERE 1';
86
+
87
+ $stmt = $dbh->prepare($sql);
88
+
89
+ $stmt->execute();
90
+
91
+
92
+
93
+ $dbh = null;
94
+
95
+
96
+
97
+ print '商品一覧<br /><br />';
98
+
99
+
100
+
101
+ print '<form method="post" action="pro_branch.php">';
102
+
103
+ while(true){
104
+
105
+ $rec = $stmt -> fetch(PDO::FETCH_ASSOC);
106
+
107
+ if($rec==false){
108
+
109
+ break;
110
+
111
+ }
112
+
113
+ print'<input type="radio" name="procode" value="'.$rec['code'].'">';
114
+
115
+ print $rec['name'].'---';
116
+
117
+ print $rec['price'].'円';
118
+
119
+ print'<br />';
120
+
121
+ }
122
+
123
+ print '<input type="submit" name="disp" value="参照">';
124
+
125
+ print '<input type="submit" name="add" value="追加">';
126
+
127
+ print '<input type="submit" name="edit" value="修正">';
128
+
129
+ print '<input type="submit" name="delete" value="削除">';
130
+
131
+
132
+
133
+ print '</form>';
134
+
135
+ }
136
+
137
+
138
+
139
+
140
+
141
+ catch(Exception $e){
142
+
143
+ print 'ただいま障害発生中です。ご迷惑おかけします。';
144
+
145
+ exit();
146
+
147
+ }
148
+
149
+
150
+
151
+ ?>
152
+
153
+
154
+
155
+ <br />
156
+
157
+ <a href="../staff_login/staff_top.php">トップメニューへ</a><br />
158
+
159
+ </body>
160
+
161
+ </html>
162
+
163
+ ```
164
+
165
+ staff_branch.php
166
+
167
+ ```
168
+
169
+ <?php
170
+
171
+
172
+
173
+ session_start();
174
+
175
+ session_regenerate_id(true);
176
+
177
+ if(isset($_SESSION['login'])==false)
178
+
179
+ {
180
+
181
+ print 'ログインされていません<br />';
182
+
183
+ print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>';
184
+
185
+ exit();
186
+
187
+ }
188
+
189
+ else
190
+
191
+ {
192
+
193
+ print $_SESSION['staff_name'];
194
+
195
+ print 'さんログイン中<br />';
196
+
197
+ print '<br />';
198
+
199
+ }?>
200
+
201
+
202
+
203
+ <!DOCTYPE html>
204
+
205
+ <html>
206
+
207
+ <head>
208
+
209
+ <meta charset="UTF-8">
210
+
211
+ <title>ろくまる農園</title>
212
+
213
+ </head>
214
+
215
+ <body>
216
+
217
+
218
+
219
+ <?php
220
+
221
+
222
+
223
+ try{
224
+
225
+ $dsn = 'mysql:dbname=shop;host=localhost;charset=utf8';
226
+
227
+ $user = 'root';
228
+
229
+ $password= '';
230
+
231
+ $dbh = new PDO($dsn,$user,$password);
232
+
233
+ $dbh -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
234
+
235
+
236
+
237
+ $sql = 'SELECT code, name,price FROM mst_product WHERE 1';
238
+
239
+ $stmt = $dbh->prepare($sql);
240
+
241
+ $stmt->execute();
242
+
243
+
244
+
245
+ $dbh = null;
246
+
247
+
248
+
249
+ print '商品一覧<br /><br />';
250
+
251
+
252
+
253
+ print '<form method="post" action="pro_branch.php">';
254
+
255
+ while(true){
256
+
257
+ $rec = $stmt -> fetch(PDO::FETCH_ASSOC);
258
+
259
+ if($rec==false){
260
+
261
+ break;
262
+
263
+ }
264
+
265
+ print'<input type="radio" name="procode" value="'.$rec['code'].'">';
266
+
267
+ print $rec['name'].'---';
268
+
269
+ print $rec['price'].'円';
270
+
271
+ print'<br />';
272
+
273
+ }
274
+
275
+ print '<input type="submit" name="disp" value="参照">';
276
+
277
+ print '<input type="submit" name="add" value="追加">';
278
+
279
+ print '<input type="submit" name="edit" value="修正">';
280
+
281
+ print '<input type="submit" name="delete" value="削除">';
282
+
283
+
284
+
285
+ print '</form>';
286
+
287
+ }
288
+
289
+
290
+
291
+
292
+
293
+ catch(Exception $e){
294
+
295
+ print 'ただいま障害発生中です。ご迷惑おかけします。';
296
+
297
+ exit();
298
+
299
+ }
300
+
301
+
302
+
303
+ ?>
304
+
305
+
306
+
307
+ <br />
308
+
309
+ <a href="../staff_login/staff_top.php">トップメニューへ</a><br />
310
+
311
+ </body>
312
+
313
+ </html>
314
+
315
+
316
+
317
+ ```
318
+
319
+ pro_add_check.php
320
+
321
+ ```
322
+
323
+ <?php
324
+
325
+
326
+
327
+ session_start();
328
+
329
+ session_regenerate_id(true);
330
+
331
+ if(isset($_SESSION['login'])==false)
332
+
333
+ {
334
+
335
+ print 'ログインされていません<br />';
336
+
337
+ print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>';
338
+
339
+ exit();
340
+
341
+ }
342
+
343
+ else
344
+
345
+ {
346
+
347
+ print $_SESSION['staff_name'];
348
+
349
+ print 'さんログイン中<br />';
350
+
351
+ print '<br />';
352
+
353
+ }?>
354
+
355
+
356
+
357
+ <!DOCTYPE html>
358
+
359
+ <html>
360
+
361
+ <head>
362
+
363
+ <meta charset="UTF-8">
364
+
365
+ <title>ろくまる農園</title>
366
+
367
+ </head>
368
+
369
+ <body>
370
+
371
+
372
+
373
+ <?php
374
+
375
+
376
+
377
+ //if (isset($_POST["name"]) &&
378
+
379
+ // isset($_POST["pass"]) &&
380
+
381
+ // isset($_POST["pass2"])
382
+
383
+ // ) {
384
+
385
+ require_once('../common/common.php');
386
+
387
+
388
+
389
+ $post=sanitize($_POST);
390
+
391
+ $pro_name = $post["name"];
392
+
393
+ $pro_price = $post["price"];
394
+
395
+ $pro_gazou = $_FILES["gazou"];
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+ // }
404
+
405
+ if($pro_name == '' ){
406
+
407
+ print '商品名が入力されていません<br />';
408
+
409
+ }
410
+
411
+ else
412
+
413
+ {
414
+
415
+ print '商品名:';
416
+
417
+ print $pro_name;
418
+
419
+ print '<br />';
420
+
421
+ }
422
+
423
+
424
+
425
+ if(preg_match('/^[0-9]+$/',$pro_price)==0)
426
+
427
+ {
428
+
429
+ print '価格をきちんと入力してください<br />';
430
+
431
+ }
432
+
433
+ else
434
+
435
+ {
436
+
437
+ print '価格:';
438
+
439
+ print $pro_price;
440
+
441
+ print '円<br />';
442
+
443
+ }
444
+
445
+
446
+
447
+ if($pro_gazou['size'] > 0)
448
+
449
+ {
450
+
451
+ if($pro_gazou['size'] > 1000000)
452
+
453
+ {
454
+
455
+ print '画像が大きすぎます';
456
+
457
+ }
458
+
459
+
460
+
461
+ else
462
+
463
+ {
464
+
465
+ move_uploaded_file($pro_gazou['tmp_name'],'./gazou/'.$pro_gazou['name']);
466
+
467
+ print '<img src="./gazou/'.$pro_gazou['name'].'">';
468
+
469
+ print '<br />';
470
+
471
+ }
472
+
473
+ }
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+ if($pro_name=='' || preg_match('/^[0-9]+$/',$pro_price)==0 ||$pro_gazou['size']>1000000)
484
+
485
+ {
486
+
487
+ print '<form>';
488
+
489
+ print '<input type="button" onclick="history.back()" value="戻る">';
490
+
491
+ print '</form>';
492
+
493
+ }
494
+
495
+
496
+
497
+ else
498
+
499
+ {
500
+
501
+ print '上記の商品を追加します';
502
+
503
+ print '<form method="post" action="pro_add_done.php">';
504
+
505
+ print '<input type="hidden" name="name" value="'.$pro_name.'">';
506
+
507
+ print '<input type="hidden" name="price" value="'.$pro_price.'">';
508
+
509
+ print '<input type="hidden" name="gazou_name" value="'.$pro_gazou['name'].'">';
510
+
511
+ print '<br />';
512
+
513
+ print '<input type="button" onclick="history.back()" value="戻る">';
514
+
515
+ print '<input type="submit" value="OK">';
516
+
517
+ print '</form>';
518
+
519
+
520
+
521
+ }
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+ ?>
530
+
531
+
532
+
533
+ </body>
534
+
535
+ </html>
536
+
537
+
538
+
539
+ ```
540
+
541
+ 見直してすぐに疑問だったところ二つのファイルを挙げさせてもらいます。
542
+
543
+ ➀SQLやパスワードのやり取りをする上でこれで安全なのか知りたいです。
544
+
545
+ ➁他のファイルなのですが、使用者側のログイン・会員登録・削除と管理側のページが行き来できる事に危険性はないのか
546
+
547
+ ➂preg_match で、半角英・数字を扱う文の書き方を教えていただきたいです。

1

2017/06/11 12:19

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -7,3 +7,5 @@
7
7
  」として仕事ができるのでしょうか?
8
8
 
9
9
  (仕事になるレベルでの知識が得られるサイトも教えていただけたら嬉しいです)
10
+
11
+ スマホからの投稿なので、疑問に思ったコードを追記します。