ご意見ありがとうございました。
次に進もうと思います。
以下、質問です。
タイトルの通り、「気付けばプロ並PHP」という書籍をおわらせました。次はセキュリティに関して覚えた方がいいと言われたこともあり、「体系的に学ぶ、安全なWebアプリケーションの作り方」(以下徳丸本)も買ってきて少し読みました。
ですが、「気付けばプロ並」のほうはパスワードハッシュなどが現在推奨されないものである事などを指摘されたので、「現行の、セキュリティ面などにおいても適切な」コーディングを知りたいと思いました。
その上で、徳丸本を終わらせたらいわゆる「即戦力
」として仕事ができるのでしょうか?
(仕事になるレベルでの知識が得られるサイトも教えていただけたら嬉しいです)
先ほどはスマホからの投稿なので後から追記しました。
pro_list.php
<?php session_start(); session_regenerate_id(true); if(isset($_SESSION['login'])==false) { print 'ログインされていません<br />'; print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>'; exit(); } else { print $_SESSION['staff_name']; print 'さんログイン中<br />'; print '<br />'; }?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php try{ $dsn = 'mysql:dbname=shop;host=localhost;charset=utf8'; $user = 'root'; $password= ''; $dbh = new PDO($dsn,$user,$password); $dbh -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = 'SELECT code, name,price FROM mst_product WHERE 1'; $stmt = $dbh->prepare($sql); $stmt->execute(); $dbh = null; print '商品一覧<br /><br />'; print '<form method="post" action="pro_branch.php">'; while(true){ $rec = $stmt -> fetch(PDO::FETCH_ASSOC); if($rec==false){ break; } print'<input type="radio" name="procode" value="'.$rec['code'].'">'; print $rec['name'].'---'; print $rec['price'].'円'; print'<br />'; } print '<input type="submit" name="disp" value="参照">'; print '<input type="submit" name="add" value="追加">'; print '<input type="submit" name="edit" value="修正">'; print '<input type="submit" name="delete" value="削除">'; print '</form>'; } catch(Exception $e){ print 'ただいま障害発生中です。ご迷惑おかけします。'; exit(); } ?> <br /> <a href="../staff_login/staff_top.php">トップメニューへ</a><br /> </body> </html>
staff_branch.php
<?php session_start(); session_regenerate_id(true); if(isset($_SESSION['login'])==false) { print 'ログインされていません<br />'; print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>'; exit(); } else { print $_SESSION['staff_name']; print 'さんログイン中<br />'; print '<br />'; }?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php try{ $dsn = 'mysql:dbname=shop;host=localhost;charset=utf8'; $user = 'root'; $password= ''; $dbh = new PDO($dsn,$user,$password); $dbh -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = 'SELECT code, name,price FROM mst_product WHERE 1'; $stmt = $dbh->prepare($sql); $stmt->execute(); $dbh = null; print '商品一覧<br /><br />'; print '<form method="post" action="pro_branch.php">'; while(true){ $rec = $stmt -> fetch(PDO::FETCH_ASSOC); if($rec==false){ break; } print'<input type="radio" name="procode" value="'.$rec['code'].'">'; print $rec['name'].'---'; print $rec['price'].'円'; print'<br />'; } print '<input type="submit" name="disp" value="参照">'; print '<input type="submit" name="add" value="追加">'; print '<input type="submit" name="edit" value="修正">'; print '<input type="submit" name="delete" value="削除">'; print '</form>'; } catch(Exception $e){ print 'ただいま障害発生中です。ご迷惑おかけします。'; exit(); } ?> <br /> <a href="../staff_login/staff_top.php">トップメニューへ</a><br /> </body> </html>
pro_add_check.php
<?php session_start(); session_regenerate_id(true); if(isset($_SESSION['login'])==false) { print 'ログインされていません<br />'; print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>'; exit(); } else { print $_SESSION['staff_name']; print 'さんログイン中<br />'; print '<br />'; }?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php //if (isset($_POST["name"]) && // isset($_POST["pass"]) && // isset($_POST["pass2"]) // ) { require_once('../common/common.php'); $post=sanitize($_POST); $pro_name = $post["name"]; $pro_price = $post["price"]; $pro_gazou = $_FILES["gazou"]; // } if($pro_name == '' ){ print '商品名が入力されていません<br />'; } else { print '商品名:'; print $pro_name; print '<br />'; } if(preg_match('/^[0-9]+$/',$pro_price)==0) { print '価格をきちんと入力してください<br />'; } else { print '価格:'; print $pro_price; print '円<br />'; } if($pro_gazou['size'] > 0) { if($pro_gazou['size'] > 1000000) { print '画像が大きすぎます'; } else { move_uploaded_file($pro_gazou['tmp_name'],'./gazou/'.$pro_gazou['name']); print '<img src="./gazou/'.$pro_gazou['name'].'">'; print '<br />'; } } if($pro_name=='' || preg_match('/^[0-9]+$/',$pro_price)==0 ||$pro_gazou['size']>1000000) { print '<form>'; print '<input type="button" onclick="history.back()" value="戻る">'; print '</form>'; } else { print '上記の商品を追加します'; print '<form method="post" action="pro_add_done.php">'; print '<input type="hidden" name="name" value="'.$pro_name.'">'; print '<input type="hidden" name="price" value="'.$pro_price.'">'; print '<input type="hidden" name="gazou_name" value="'.$pro_gazou['name'].'">'; print '<br />'; print '<input type="button" onclick="history.back()" value="戻る">'; print '<input type="submit" value="OK">'; print '</form>'; } ?> </body> </html>
見直してすぐに疑問だったところ二つのファイルを挙げさせてもらいます。
➀SQLやパスワードのやり取りをする上でこれで安全なのか知りたいです。
➁他のファイルなのですが、使用者側のログイン・会員登録・削除と管理側のページが行き来できる事に危険性はないのか
➂preg_match で、半角英・数字を扱う文の書き方を教えていただきたいです。
回答7件
あなたの回答
tips
プレビュー