##はじめに
プログラミング学習の成果物として今回のポートフォリオを制作いたしました。
アウトプットとしてこちらに投稿します。
##ポートフォリオについて
『MusicRoot』 という名前でCDのECサイトを開発いたしました。
なぜなら私は音楽が好きなのですが、
最近はコロナの影響でライブが中止になり路上やライブハウスで販売していた
インディーズアーティストのCDを買う手段があまりないと感じからです。
開発に当たって出品者はアピールをしやすいように紹介文の機能や在庫管理しやすい出品履歴機能を、
買い手にはスムーズに取引できるようにコメント機能を付けて
自分と同じように音楽を好きな人が利用したくなるよう意識しました。
##開発環境
・PHP7.32.4
・MySQL
・Github
・Visual Studio Code
##実装機能
No | 機能 | 機能について |
---|---|---|
1 | 新規登録機能 | |
2 | ログイン機能 | |
3 | ゲストログイン機能 | 新規登録不要の予め登録されているユーザー |
4 | 商品の検索機能 | 商品一覧から該当の商品を検索できる |
5 | ページネーション機能 | 商品一覧、出品履歴、購入履歴一覧ページに |
6 | 商品出品機能 | 商品の在庫数、値段、ジャンル、アーティスト名、画像などを登録 |
7 | 商品の編集機能 | 金額、在庫、説明文を編集できる |
8 | 商品の削除機能 | 出品者が商品を削除できる |
9 | 商品の停止機能 | 出品者が商品を停止できる |
10 | カートに追加機能 | 商品をカートに追加できる |
11 | カートの数量変更 | 商品の数量を変更できる |
12 | カートの削除機能 | 商品の削除できる |
13 | 商品購入機能 | 商品の購入する |
14 | コメント機能 | 商品についてコメントができる |
15 | コメント削除機能 | コメントを削除できる |
16 | アーティストの検索機能 | アーティストを検索できる |
17 | アーティストの登録機能 | 未登録のアーティストを登録 |
18 | マイページの編集機能 | マイページを編集できる |
##セキュリティ対策
PHPとMySQLのみで、SQLフレームワークを使用せずに開発したのでセキュリティ、脆弱性の対策をしています。
SQLインジェクション
formからpostされてきた値を変数に格納し、PDOのprepareメソッドを利用して作成したステートメントに値をバインドさせることによってアプリケーションに意図しないSQL文が注入されることを阻止しています。
上記の関数を使用してechoを使い値を出力するときはエスケープ処理をするようにしました。
ex) echo h(hoge);
クロスサイトリクエストフォージェリ (CSRF)
トークンを利用して正しいリクエスト
であるかをチェックしました。
まずpost送信を行う全てのformに対して、ランダムな文字列のトークンを生成してセッションにトークン値をセットします。そしてpost送信の受け取って操作をする前に、そのトークンの照合行い、異なる値の場合には、ログインページに飛ばします。
また、トークンの文字列が盗まれて再利用されないようにトークンの破棄もしています。
##デプロイ
conohaのvpsを使って、デプロイいたしました。
手順として、ssh接続し、本番環境にファイル、データベースの設置。
その後、セキュリティを高めるために、rootログインを禁止にし、filewallの設定でポート番号を変更しました。
##工夫した点
コーディングの可読性の意識
わかりやすくするため関数や変数名などはなるべく詳細な命名を。
また共通化するため共通した処理をまとめたファイルをrequire、includeなどの関数を使って取り込みました。
MVCモデルの意識
model、view、controllerと意識しながらそれぞれのフォルダを作成することで役割ごとに効率的に開発していきました。
##ポートフォリオの課題点
・デザイン面でユーザーが見やすいレスポンシブ対応やUIなどの意識もしていきたい。
・実装したい機能がまだある(パスワード再設定や編集ページには全て確認ページを設置など)
・DB設計が不十分
→重複したDBの値などがありDBを発行しすぎている。なのでDB設計を見直すことにより処理をもっとシンプルにできると考えている。
##まとめ
初めて環境構築からデプロイまで経験してみて、様々なエラーに直面し
大変でしたが解決していくことで自走力がつきました。
今回フレームワークを使うことなくphpのみで開発することで
セキュリティに関する知識や対策、SQL文について理解を深めることができたので
今後の開発に活かしていきたいです。