質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Q&A

解決済

2回答

4768閲覧

PHPでログイン機能 フォルダ内の全ファイルに対して制限をかけたい

yuzusan

総合スコア7

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

0グッド

0クリップ

投稿2020/04/07 14:30

実現したいこと&現状

PHPを使用しログインシステムを作成。フォルダ内の全ファイルに対して制限をかけたい。
※初心者が趣味で作成しているのでセキュリティ対策については考慮しません。

大まかな仕組みはlogin.phpでCSVからユーザー名とパスワードを参照し、一致すればsessionに"OK"と保存。
制限をしたいすべてのファイルに対し以下のコードを書き、sessionがあれば何もしない(=そのファイルにある内容が表示される)。sessionがなければlogin.phpに移動するように作成しました。

php

1//ログイン状態判別 2if(!isset($_SESSION["login"])) { 3 header("Location:" . "login.php"); 4 exit; 5}

このようなやり方ではPHPコードを記入できるファイル(html,php)でのみログイン状態認識機能が作動し、サーバー内にあるjpeg,png,mp3,mp4,csvなどのファイルは閲覧できてしまいます。

そのため.htaccessを使えないか調べましたが、対処法が見つからずお手上げ状態です。
例えば.htaccessを使いすべてのファイルへのアクセスに対して、上記PHPコードをはじめに読み込ませるとか。

追記

フォルダ構成
ディレクトリに制限をかけたいですが、可能であれば同じディレクトリ内にあるindex.php,login.phpのみ制限から除外する事が可能であれば行いたいです。

環境

サーバー:RaspberryPi
apache:2.4.38(Debian)
php:7.3.14

自宅サーバーなので設定変更はなんでもできます。

###お詫び

PHP,HTMLなど初心者で、このサイトへの質問も初となります。
不足している内容や訂正したほうが良い部分についてはご指摘ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

色々と方法はありますが、

  • 簡易的に実装するなら、特定のディレクトリに対して.htaccessで特定のcookieを持ってるブラウザだけアクセス出来るようにする(ログイン成功時にそのcookieをPHPでsetしておく)

と言うのが簡単です。

普通に実装するなら、

  1. ドキュメントルートより上位のディレクトリに対象のファイルを置く
  2. ブラウザからのアクセスはドキュメントルートより下にそのディレクトリがあるようなパスでアクセスさせる
  3. mod_rewriteでそのディレクトリ配下のファイルへのアクセスを認証状態を確認してダウンロードさせるPHPにアクセスさせる
  4. ダウンロード用PHPでは、そのファイルに合致したherderを出力しつつ、readfile等でファイルの中身を出力する

という感じの実装になります。

検索キーワードとしては
PHP ファイル アクセス制限
あたりかなと思うので、参考になる記述やサイトを探してみて下さい。(teratailでも何度か見かけた事があります)

投稿2020/04/07 14:58

tanat

総合スコア18727

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuzusan

2020/04/08 01:18

回答ありがとうございます。 1. 2. の意味は理解できました。 ダウンロード用PHPとはどのような意味ですか?ファイル(html,png,mp3など)をアクセスしているPCに保存するということですか?
tanat

2020/04/08 01:25

ブラウザが直接ファイルにアクセスするのでは無く、PHPにアクセスしてそのPHPが認証などの処理をしてからブラウザにファイルをダウンロードさせたり表示させたりすることができます。 PHP ファイル ダウンロード 等で調べてみてください。
yuzusan

2020/04/08 08:57

調べてみました。 ・このやり方だとアクセスするユーザーが画像などのファイルパスを直接入力したら、そのまま表示されませんか? ・URL的にはどのファイルにアクセスしようとした場合でも拡張子.phpファイルになってしまいますか? ・すべてのファイルに対してファイルタイプを指定しなければいけませんか?
tanat

2020/04/08 09:08

> ・このやり方だとアクセスするユーザーが画像などのファイルパスを直接入力したら、そのまま表示されませんか? されません。 ファイルの実体はドキュメントルート外に存在するため直接ブラウザからアクセスすることはできません。 認証機能はとりあえずおいておいて、PHPからドキュメントルート外のファイルをダウンロードするだけのプログラムを組んでみて色々試されると理解が進みやすいかと思いますよ。 > ・URL的にはどのファイルにアクセスしようとした場合でも拡張子.phpファイルになってしまいますか? なりません。 mod_rewriteでブラウザからアクセスするURLと実際にアクセスされるURLを変換することが出来ます。 > ・すべてのファイルに対してファイルタイプを指定しなければいけませんか? ある程度さぼってもブラウザ側がうまいこと処理してくれる可能性はありますが、 想定通りに動かそうと思ったらファイルタイプ等のHTTPヘッダーを正確に指定する必要があります。
yuzusan

2020/04/08 12:36

ご丁寧にありがとうございます。 思っている通りのプログラムが作れそうです。完成までには少し時間がかかりそうなのでまだすべて思い通りに動作するか未確認ですが、この回答をベストアンサーに選ばせていただきます。
guest

0

※初心者が趣味で作成しているのでセキュリティ対策については考慮しません

要件がよくわかりませんが、ベーシック認証でイケる気がします。
ただ、セキュリティを気にしないのであれば、特に閲覧を制限する必要もないのでは?

投稿2020/04/07 14:47

編集2020/04/07 14:48
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuzusan

2020/04/08 00:55

ベーシック認証ではなくPHPを使いログイン機能を作成したいと思っています。 セキュリティ対策というのはプログラムの作りが甘く、ハッカーや知識のある人などが今回のログイン機能を突破しページにアクセスしてしまうという意味で記入しました。 今回は作成したプログラムを実際にインターネット上で使うつもりはありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問