初めに
開発環境は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設計
カラムは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を意識する
フレームワークを使っていなくてもmodel、view、controllerとそれぞれのフォルダを作り、データの流れを意識しながら、開発を進めました。
2.高品質なコーディングを心がける
なるべくわかりやすい関数名、変数名を命名し、require,includeなどの関数を用いて、templeteファイルなどで共通化を取り入れました。さらにコメントを積極的に、コード内に書き込み可読性の高いコーディングに仕上げました。
参考 github
デプロイについて
conohaのvpsを使って、デプロイしました。
ssh接続し、本番環境にファイル、データベースの設置が完了したら、
セキュリティを高めるために、rootログインを禁止にし公開鍵認証の設置、filewallの設定でポート番号を変更しました。
そして、ドメインを購入して、conohaのIPアドレスに割り当てました。
課題
デザイン面
バックエンドエンジニアを目指しているので、凝ったデザインではなく、シンプルなもので仕上げたので、もっと使い勝手がよくなるように、レスポンシブにも対応させていきたいです。
DBの発行のしすぎ
重複したDBの値などもあり、処理が増えてしまっている。
まとめ
・フレームワークを使っていないので、多機能なアプリとは言えないが、あえてPHPのみでの開発でプログラミングの楽しさや、エラーが発生した時の自走力が身につきました。
・セキュリティに関する知識、対策、SQLの理解なども深めることができました。フレームワークを利用すると、あまり直接SQL文を書くことがないのでとても勉強になったし、汎用性のきく知識だと感じています。
最後まで、読んでいただきありがとうございました!!
