1
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 5 years have passed since last update.

PHPでログインが必要なサイトを作る方法(第2回)

Posted at

こんにちは、片山学園 鉄道研究会のstmkzaです。

今回は前回の続きです。前回:PHPでログインが必要なサイトを作る方法(第1回)

URLの拡張子を消す方法

それではログインページを作りましょう。

その前に、URLの.phpを消して、/loginでアクセスできるようにしましょう

今回はApacheを使っているので、.htaccesshttpd.confファイルに設定を記述していきましょう。

/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine on
    # URLがディレクトリでなくて
    RewriteCond %{REQUEST_FILENAME} !-d
    # URLのファイル名に「.php」をつけたファイルが存在するなら
    RewriteCond %{REQUEST_FILENAME}\.php -f
    # そのPHPファイルを代わりに表示する
    RewriteRule ^(.*)$ $1.php
</IfModule>

PHPファイルからincludeされるファイルの直接アクセスを禁止する

内部で読み込まれるためのPHPファイルに直接アクセスされると不具合が出たり、セキュリティー上の問題が起こることがあります。

ですので、/inc/*のファイルへのアクセスは禁止します。

/inc/.htaccess
deny from all

単純にすべてのアクセスを拒否する単純な設定です。

ログインページを作る

すみません、具体的なソースコードはセキュリティー上の理由で公開できません。ですので、大体の仕様をここに書きます

  • ログインフォームは/loginにPOSTする
  • ユーザー名は[name="username"]、パスワードは[name="password"]とする
  • ログインチェック処理は
    1. セッションを開始(session_start()を実行)
    2. ユーザー名とパスワードが送信されているかチェックする
    3. パスワードソルトとパスワードを連結して、ストレッチングしてDBから取得したパスワードハッシュと比較
    4. 成功したら$_SESSION['user']にユーザー名を格納する
    5. エラーをを表示(失敗時) or /indexにリダイレクト(成功時)

こんな感じにしました。

注意点としては、絶対に/inc/auth.phpを読み込んではいけないということです。

前回も書いた通り、リダイレクトループになります。

1
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
1
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?