#初めに
開発環境は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サイトで必須となる、出品->カートに追加->購入機能を中心に、本を扱うアプリなので、本の状態や、著者、コメント機能なども、追加していきました。
カラムは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文を書くことがないのでとても勉強になったし、汎用性のきく知識だと感じています。
最後まで、読んでいただきありがとうございました!!