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

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

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

BASICとは、手続き型言語の一つ。英語に準した簡易な記述になっており、基本的には初心者向けのプログラミング言語です。1970年代以降のコンピュータでよく使用された言語で、様々な拡張を加え現在も利用されています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

Q&A

解決済

2回答

1024閲覧

phpにbasic認証をかけたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

BASIC

BASICとは、手続き型言語の一つ。英語に準した簡易な記述になっており、基本的には初心者向けのプログラミング言語です。1970年代以降のコンピュータでよく使用された言語で、様々な拡張を加え現在も利用されています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

0グッド

0クリップ

投稿2019/07/10 07:07

一部のphpにbasic認証をかけたいのですが、
IDとPASSを入力しても再度認証画面が出てきてしまいます。

コード:
--functions.php---
function basic_auth($auth_list,$realm="Restricted Area",$failed_text="認証のテキストに失敗しました"){
if (isset($_SERVER['PHP_AUTH_USER']) and isset($auth_list[$_SERVER['PHP_AUTH_USER']])){
if ($auth_list[$_SERVER['PHP_AUTH_USER']] == $_SERVER['PHP_AUTH_PW']){
return $_SERVER['PHP_AUTH_USER'];
}
}

header('WWW-Authenticate: Basic realm="'.$realm.'"'); header('HTTP/1.0 401 Unauthorized'); header('Content-type: text/html; charset='.mb_internal_encoding()); die($failed_text);

}

--header.php---

<?php if(!is_home()): if(is_page('Basic認証を掛けたいページID ')): $userArray = array("ID" => "PASS" ); basic_auth($userArray); endif; endif; ?>

ちなみに、.htaccessに以下の記述を記入すると解消されるとの記事を見かけ試しましたが、変化なしでした。
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.)
RewriteRule ^(.
) - [E=HTTP_AUTHORIZATION:%1]

よろしくお願い致します。

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

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

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

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

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

m.ts10806

2019/07/10 07:15

「phpに」というのは何を意図した表現でしょうか? よくある.htaccessと.htpasswdによるベーシック認証ではダメなのでしょうか?
退会済みユーザー

退会済みユーザー

2019/07/10 07:21

特定のページのみに認証をかけたいという意味合いで書きました、 .htaccessと.htpasswdによるやり方も試してみたんですが、 同じく認証画面が繰り返し表示される状況でした。
guest

回答2

0

ベストアンサー

サーバに特殊な設定がされていた為、Basic認証が掛けられなかった様です。
管理画面よりアクセス制限をかけ、解消いたしました。

yukikpさん、te2jiさんありがとうございました。

投稿2019/07/12 05:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

PHP

1//functions.phpに追記 2 3function authCheck( $goBack = false ){ 4 5 $authList = array( 6 "/*ここにID*/" => "/*ここにPW*/", 7 ); 8 $realm="Restricted Area"; 9 $failedText="認証に失敗しました"; 10 11 if( !empty( $_SERVER['PHP_AUTH_USER'] ) && !empty( $authList[$_SERVER['PHP_AUTH_USER']] ) ): 12 13 if( $authList[$_SERVER['PHP_AUTH_USER']] == $_SERVER['PHP_AUTH_PW'] ): 14 wp_die( 'ID:' . $_SERVER['PHP_AUTH_USER'] . '=> PW:' . $authList[$_SERVER['PHP_AUTH_USER']] . ' 一度は認証通ったよ' ); 15 return $_SERVER['PHP_AUTH_USER']; 16 else: 17 wp_die( 'ID:' . $_SERVER['PHP_AUTH_USER'] . '=> PW:' . $authList[$_SERVER['PHP_AUTH_USER']] . ' 認証通りませんでした' ); 18 endif; 19 endif; 20 21 if( $goBack == false ): 22 header( 'WWW-Authenticate: Basic realm="' . $realm . '"' ); 23 header( 'HTTP/1.0 401 Unauthorized'); 24 header( 'Content-type: text/html; charset='.mb_internal_encoding()); die( $failedText ); 25 else: 26 return false; 27 endif; 28 29} 30 31 32/* 33あとは、header.phpの【1行目】で、Basic認証掛けたいページにだけauthCheck();が使われるように設定。 34サイト全体なら、functions.phpのどこかにauthCheck();って入れておけばOK 35*/ 36//例:header.php 37 38if( is_page( 'hogehoge' ) ) authCheck(); 39

投稿2019/07/10 07:21

編集2019/07/10 07:38
yukikp

総合スコア797

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

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

退会済みユーザー

退会済みユーザー

2019/07/10 07:32

コードちゃんと見てないけど、適当な id と空のパスワードで通る気がする。
yukikp

2019/07/10 07:35

ああああ直す前にte2jiさんにしてきされてしまいました。isset()ではなく!empty()に変えてみました
yukikp

2019/07/10 07:37

通常のやり方だとBasic認証が再度かかってしまうんですね。 自分の回答を修正し、どの段階までBasic認証の処理が通っているのかわかるように修正してみました。 いかがでしょう?
退会済みユーザー

退会済みユーザー

2019/07/10 07:43 編集

気にしてたのは、こっちです。 if( $authList[$_SERVER['PHP_AUTH_USER']] == $_SERVER['PHP_AUTH_PW'] ) ゆるい比較だと $hoge = null; var_export($hoge == "")//true notice 出るけど処理は通る。
退会済みユーザー

退会済みユーザー

2019/07/10 07:53

headerに表記してみたんですが、間違いないでしょうか? <?php if( is_page( '該当のページ' ) ) authCheck(); ?> また、回答いただいたコードに変更したところ id、passが違ったものでも変わらず繰り返し表示されます。
yukikp

2019/07/10 07:53

$hoge = null;だと、 if( !empty( $hoge ) ){} の判定を通らないのですが、確かに緩い判定を残しておく理由にはならないですね。
yukikp

2019/07/10 07:55

shituさん 修正して、認証が通ったとき、通らなかったとき、どちらでもwp_die();で処理を止めているのですが、それでももう一度Basic認証が表示されますか?
退会済みユーザー

退会済みユーザー

2019/07/10 08:01

念の為もう一度確認してみたんですが、 変わらずで、認証が表示されてしまいます。
退会済みユーザー

退会済みユーザー

2019/07/10 08:18 編集

$_SERVER['PHP_AUTH_USER'] が適当な値だと $authList[$_SERVER['PHP_AUTH_USER'] が未定義になります。 つまり $authList[$_SERVER['PHP_AUTH_USER']] == $_SERVER['PHP_AUTH_PW'] // true
yukikp

2019/07/10 08:39

$_SERVER['PHP_AUTH_USER'] が適当な値だと、!empty( $authList[$_SERVER['PHP_AUTH_USER']] )ではじかれるかと思います。
yukikp

2019/07/10 08:41 編集

shituさん ちょっと色々試そうと思ったら、ファイル自体削除してリロードしてもBasic認証を要求してきたりするので、今時間をかけてちゃんと検証できませんでした。 後ほど、整えてもう一度書こうと思います。
退会済みユーザー

退会済みユーザー

2019/07/10 09:21

あー。他で対応してたんですね。 php でゆるい比較を使用するのが嫌いなんで、ゆるい比較箇所しか見てなかったです^^;失礼。
yukikp

2019/07/10 09:31

いや全然失礼じゃないですよ~。逆にお恥ずかしいです。 出来るだけ===を使うように心掛けないと、(作った本人の)思いがけないところでエラーが出ますよね。気を付けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問