3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHP/MySQLで作ったポートフォリオの振り返り

Last updated at Posted at 2021-03-15

#初めに
開発環境はmacOSで
PHPのバージョンは7.3を使用しています。
あくまで、アウトプットを目的として書いた記事なので、理解しにくい点、間違った内容があるかもしれません。ご容赦ください。

##ポートフォリオについて
名前は『BookList』というアプリで、本のECサイトという設定で開発しました。
私は本を読むことが好きで、本を専門としたECサイトは、まだ少ないと感じ
中古本を買う時に、自分が大切にしていること、買い手、売り手の気持ちになって、出品者は自分の商品を誰にどんな時に読んで欲しいのか、自分の商品のPR文の機能であったり
買い手は円滑に購入できるように、コメント機能を追加したり、
本をよく読む自分が利用したくなるようなECサイトを目指して開発しました。

##アプリの機能一覧

No 機能 機能について
1 新規登録機能
2 ログイン機能
3 ゲストログイン機能 新規登録しなくても、予め用意されているユーザー
4 パスワードのハッシュ化 この機能は記事にまとめました
5 商品の出品機能 商品の状態、種類、画像、タイトル、値段、著者などを登録
6 商品の編集 出品した、個数、値段、PR文、ステータスなどを編集
7 商品の削除 出品者は自分の商品を削除
8 コメント機能 商品の購入前に、出品者に対してコメントできる
9 コメント削除機能
10 商品の検索機能 商品の状態、種類で商品を検索できる
11 ページネーション 商品一覧ページ、商品別コメントページにそれぞれ
12 カートに追加 商品をカートに追加
13 カート削除 カートに追加した商品を削除
14 商品購入機能 商品を購入する

ECサイトで必須となる、出品->カートに追加->購入機能を中心に、本を扱うアプリなので、本の状態や、著者、コメント機能なども、追加していきました。

##DB設計
booklist ER図.png

カラムはidしか表示させていませんが、DB設計を通じて、主キーや外部キーの繋がりを理解し、論理的に開発することができました。

##セキュリティ、脆弱性
このポートフォリオは、フレームワークを使わずに、生のPHPとMysqlのみで作ったので、セキュリティ、脆弱性についてはしっかりと対策しました。

###クロスサイトスクリプティング(XSS)

//xss対策
function h($str){
  return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

上記の関数を作り、画面上にecho printを使って、値を出力する時は必ずh(hogehoge)とエスケープ処理をしました。

SQLインジェクション

これに関しては、formからpostされてきた値をそのまま、保存するのではなく、
変数に格納し、PDOのprepareメソッドを利用して作成したステートメントに値をバインドさせ対策しました。

クロスサイトリクエストフォージェリ (CSRF)

主な脆弱性の一つのcsrfに対しては、post送信を行う全てのformに対して、ランダムな文字列を生成し、post送信の受け取って操作をする前に、そのトークンの照合行い、異なる文字列の場合には、ログインページに飛ばすように処理しました。
トークンの文字列が盗まれ、再利用されないように、トークンの破棄も忘れず、実装しています。

##工夫した点

###1.MVCを意識する
フレームワークを使っていなくてもmodelviewcontrollerとそれぞれのフォルダを作り、データの流れを意識しながら、開発を進めました。

###2.高品質なコーディングを心がける
なるべくわかりやすい関数名、変数名を命名し、require,includeなどの関数を用いて、templeteファイルなどで共通化を取り入れました。さらにコメントを積極的に、コード内に書き込み可読性の高いコーディングに仕上げました。

参考 github

##デプロイについて
conohaのvpsを使って、デプロイしました。
ssh接続し、本番環境にファイル、データベースの設置が完了したら、
セキュリティを高めるために、rootログインを禁止にし公開鍵認証の設置、filewallの設定でポート番号を変更しました。
そして、ドメインを購入して、conohaのIPアドレスに割り当てました。

BookList

##課題

###デザイン面
バックエンドエンジニアを目指しているので、凝ったデザインではなく、シンプルなもので仕上げたので、もっと使い勝手がよくなるように、レスポンシブにも対応させていきたいです。

###DBの発行のしすぎ
重複したDBの値などもあり、処理が増えてしまっている。

##まとめ
・フレームワークを使っていないので、多機能なアプリとは言えないが、あえてPHPのみでの開発でプログラミングの楽しさや、エラーが発生した時の自走力が身につきました。

・セキュリティに関する知識、対策、SQLの理解なども深めることができました。フレームワークを利用すると、あまり直接SQL文を書くことがないのでとても勉強になったし、汎用性のきく知識だと感じています。

最後まで、読んでいただきありがとうございました!!

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?