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

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

新規登録して質問してみよう
ただいま回答率
85.48%
HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

PHP

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

.htaccess

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

8053閲覧

自作のフォームでBASIC認証はできますか?

kotatsu_hal

総合スコア34

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

PHP

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

.htaccess

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2018/10/17 13:43

どういうことか

通常、制限を掛けたいディレクトリ直下に .htaccess.htpasswd を用意し、BASIC認証を行いますよね。
この場合、ブラウザで該当のURLにアクセスすれば、

1.ブラウザが用意するダイアログが出てきてID/PWを入力し送信する
2.問題なく認証すれば、そのディレクトリ以下の全てのファイルにアクセスができる
3.認証しなければ、そのディレクトリ以下の全てのファイルにアクセスできない

という流れになるかと思いますが、この 1. のところをHTMLの <form> タグを使用したID/PWの入力にし、実際の認証はPHPで行いたいという要件になります。
ただしこの時、2. や 3. は上記の通りにしたいのです。普通にPHPでセッションとか使った認証にしてしまうと、その該当ディレクトリに入っている画像やPDFファイルに直接リンクできてしまう問題があります。(HTMLやPHPのページコンテンツは、冒頭にセッション認証のコードを入れることはできます)

つまり、機能的にはBASIC認証なんですが、入力と認証は <form> タグとPHPで構成したいのです。
BASIC認証なんてhttpヘッダーのやりとりなんだからなんとかなるだろーと思っていろいろ調べてたところ・・・。

いろいろ調べたけどわからない...

いろいろ調べたのですが、WWW-Authenticate ヘッダーを出力するとか、$_SERVER['PHP_AUTH_USER'] に入力したIDが入ってくるだとか、BASIC認証のウィンドウを出すための方法ばかりがヒットするもので、心が萎えています。。。
以下のサイトにあるように、認証後はブラウザ側が自動的にID/PWを送出してくれる必要があるかと思うので、無理っぽい感じがプンプンしてるんですが、なにか方法があるんでしょうか。

Basic認証とフォームによる認証についてのまとめ

  1. 一度ログインが確立した後はブラウザが前回入力されたユーザID・パスワードを覚えていて、自動でHTTPのAuthorizationヘッダにユーザIDとパスワードを埋め込んで送信する.

お心あたりのある方がいらっしゃいましたら、是非ご教授のほどよろしくお願いいたします!
m(_ _)m

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

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

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

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

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

guest

回答1

0

ベストアンサー

大まかには以下の様な流れで実現できます。

  1. フォームの送信先では認証に成功したらその旨をセッション情報に記録
  2. 認証が必要なファイルをブラウザからアクセス出来ないディレクトリに配置する。

例)ドキュメントルートが /var/www/html だとしたら /var/www/data に配置
2. ブラウザからのアクセスするパスがhttp://example.com/data/a.pdfだとした場合、/var/www/html/dataへのアクセスを/var/www/html/get_file.phpみたいな感じのPHPファイルにリダイレクト or mod_rewriteでアクセス先を変更させる。
3. get_file.phpでは、readfile()や等を使って/var/www/data以下のファイルの中身を取得し、ヘッダとファイルの中身を出力してブラウザに与える。この際に認証情報のチェックを行う。

内容的にかなり近い質問がありました

投稿2018/10/17 15:51

tanat

総合スコア18713

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

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

kotatsu_hal

2018/10/18 00:46 編集

mod_rewrite は思いつきませんでした! これならBASIC認証じゃなくても要件を満たしてますね!すばらしい! ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問