やりたいこと
上図の青色の枠の中ように、
HTML,CSS,JavaScript,画像等で構成された一つのWebページが一つのフォルダに入っております。
この、青色の枠の中は、会員登録を行ったユーザかつ、その中でも認証を行ったユーザのみしか閲覧されたくありません。
このアクセス制限の方法を考えているのですが、一向に手段が思い浮かばず、お知恵を貸していただきたいと存じます。
行ったこと
ルーティング
Laravelのmod_rewrite処理を書いた.htaccessを青色の枠のフォルダ内におき、
access.phpのようなPHPファイルを別途作成し、そこにアクセスを転送させ、
SESSIONなどで認証を行っているかをaccess.phpで確認ができたらリダイレクトを行う。
↓
まあ、もちろん無限ループになりました。
action
以下のような処理を書いた.htaccessを青色の枠のフォルダ内におき、
access.phpのようなPHPファイルを別途作成し、そこにアクセスを転送させ、
SESSIONなどで認証を行っているかをaccess.phpで確認ができたらリダイレクトを行う。
Action text/html /青枠のフォルダまでのパス/access.php
↓
無限ループになりました。
後は、旧式の考えではありますが、フォルダにBASIC認証をかけようと思ったのですが、
ユーザには一度ログインを行ってもらっているので、再度BASIC認証で情報を入力してもらうのは良くなく、
そもそも、動的にユーザ情報を出力するのは難しそうなので躊躇しています。
PHP側で、BASIC認証用のヘッダを作成し、水色の枠の「メンバーページ」にログインしていたらBASIC認証を素通りでき、していなければこちらが用意した独自のログイン画面に遷移させ、
BASIC認証とは異なるログインをおこない、それがOKであればBASIC認証を行ったとすることは可能でしょうか?
ご存知の方がいらっしゃいましたら、やり方、ご意見等のお知恵を貸していただけますと幸いです。
よろしくお願いいたします。
環境
PHP:7.2.3
Apache:2.4.6 (CentOS)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/16 02:16
回答4件
0
単純で汎用的な方法は、認証処理を含んだプログラム経由でコンテンツをサーブすることです。PHPならこんな感じで。
<?php $path = $_GET["path"]; // $pathが不正なものでないかチェック // 認証および認可の処理 header('Content-Type: ' + 適切な MIME type); readfile($path); ?>
http://example.jp/example.php?path=contents.html でアクセスします。
任意のパスが指定可能にならないよう、パラメータは必ずチェックしてください。
Webサーバが「認証済みかどうか」という「アプリケーション側の情報」を利用して動作を変えるのは基本難しいです。
アプリケーション側の「認証済み」という情報をアプリケーションを介さずに安全にWebサーバに伝えるのはとても困難です。単純に思いつくような方法(CookieにIDとか秘密の文字列のような何かの情報を載せるとか)は単純に突破可能なのでそんなことやるぐらいなら無条件で公開しても変わりません。
HTTP認証であればそれはWebサーバ側の情報になるので、それによって動作を変えることはある程度できます。
投稿2018/04/15 06:48
編集2018/04/15 12:57総合スコア1449
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/15 07:37
2018/04/15 08:28
2018/04/15 08:31
2018/04/15 08:46
0
Laravel使ってるのになんでこんな無駄なことを…。
Laravel使うなら素のPHPでのやり方の発想はほとんど捨てる。
隠したいファイルをpublic
に置いてるのが間違い。
html置いてるのも意味が分からないけどそういえばここではそんな質問も多かった…。
根本的な発想がずれてるとどうにもならない。
ガチガチに制限したいなら全ファイルLaravelを通して表示させる。
/member/{file}
のルーティングに対して
コントローラーからはファイルを返す。
return response()->file('secret/' . $file);
member/style.css
ならsecret/style.css
secret/style.cssを直接表示はできずLaravelの認証を通ってないと不可なようにする。
現実的にはそこまでやる必要もなくページに対して制限すれば十分。
それならLaravelの普通の認証機能の範囲。
投稿2018/04/15 06:29
総合スコア10377
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/15 06:56
2018/04/15 06:59
退会済みユーザー
2018/04/15 07:33
2018/04/15 07:41
2018/04/15 08:08 編集
退会済みユーザー
2018/04/15 08:21
2018/04/15 08:51
2018/04/15 09:15
2018/04/15 09:32
2018/04/16 15:57
0
ベストアンサー
Basic 認証の情報が漏洩するぐらいなら
Apache のみで Cookie によるアクセス制御をかける
で
<VirtualHost *:80> ServerName www.sourcewalker.com DocumentRoot "/var/www/localhost/htdocs" SetEnvIf Cookie password=\x22?pass\x22? site_password <Location /> Order deny,allow deny from all Allow from env=site_password </Location> <Files "/var/www/localhost/htdocs/auth.html"> Order allow,deny Allow from all </Files> </VirtualHost>
のようにすればいいと思います。
SetEnvIf
にある Cookie password=\x22?pass\x22?
は任意に変更してください
投稿2018/04/15 04:46
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/15 04:49
退会済みユーザー
2018/04/15 05:01
2018/04/15 05:05
退会済みユーザー
2018/04/15 05:07
退会済みユーザー
2018/04/15 05:14 編集
退会済みユーザー
2018/04/15 05:12
2018/04/15 05:12
退会済みユーザー
2018/04/15 05:18
退会済みユーザー
2018/04/15 05:29
退会済みユーザー
2018/04/15 05:41
退会済みユーザー
2018/04/15 05:44
退会済みユーザー
2018/04/15 06:13
退会済みユーザー
2018/04/15 06:14
退会済みユーザー
2018/04/15 06:50
退会済みユーザー
2018/04/15 06:51 編集
0
静的な画像ファイル等へのリンクを出力する際
html
1<img src="https://user:password@example.com/secret.jpg" alt="">
のようにすれば認証素通りできると思います。
投稿2018/04/15 04:38
総合スコア5223
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/15 04:41
2018/04/15 04:47
退会済みユーザー
2018/04/15 05:09
2018/04/15 05:10
2018/04/15 08:09 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。