質問箱/2198

カテゴリ
サマリCGI版PHPでheader()関数が使えないのでBasic認証が通らない
バージョン1.4.3
投稿者ray?
状態完了
投稿日2004-05-31 (MON) 16:29:30

質問

編集制限をかけて、認証ダイアログに正確なユーザ名とパスワードを入力しても通らず、自分なりに調べた結果、Basic認証の部分で使っているheader()関数はCGI版PHPでは使えないことが原因のような気がします。(auth.phpの内容を見ての素人考えなのですが) CGI版PHPでは認証による制限は諦めるしかないでしょうか? ちなみに、当方のHPスペースはCOOL ONLINEでCGI版PHPしか使えません。

回答

  • reimy 2004-05-31 (MON) 17:26:16

    質問箱/2085参照。

    PHPマニュアル・PHPによるHTTP認証参照。

    PHP による HTTP 認証のフックは、Apache モジュールとして実行した時のみ 有効で、CGI 版では利用できません。

    CGI版PHPでは、HTTP認証ができないので、自前でディレクトリ単位で認証するしかありません。

  • さばぞう 2004-05-31 (MON) 17:59:38

    あれ?僕のコメントが消された。内容が間違ってましたか?>reimyさん(?)

    • reimy 2004-05-31 (MON) 18:39:19

      ん? 消してないですけど。なんで消えたんだろ?

      htaccess は使えますが、COOL ONLINE正規会員では、設定ファイル名を「cool_htaccess」として下さい。(COOL ONLINE・FAQ)

      これのことが書かれてたと思いますが、これはPHPのHTTP認証とは直接関係ないです。

    • さばぞう 2004-05-31 (MON) 18:57:13

      はい。ディレクトリ毎でよければ、.accessでBasic認証できますねって話でした。_o_

  • ray? 2004-05-31 (MON) 22:32:02

    丁寧な回答ありがとうございます。
    PukiWiki関連とは若干離れてしまいますが、htaccessの設定によってBasic認証を行い、特定ユーザにのみ書き込みを許す(閲覧は全員OK)のようなことはできるのでしょうか?
    現在も色々見て回っているのですが、なかなかそういう内容のページが見つからないので、少々場違いな質問で申し訳ないのですが、教えていただけると助かります。
    COOL ONLINEはhtaccessの設定できる項目も少なくてどこまで出来るのか不安です・・・
    参考 COOL ONLINE ディレクトリごとの設定仕様

    • さばぞう 2004-06-01 (TUE) 00:17:45

      ディレクトリアクセスの制限のみだと思います。書き込みと閲覧の区別はできないはず。

  • ray? 2004-06-01 (TUE) 00:28:03

    追記です。
    その後の調べで、.htaccess内にて

    <Limit POST>
    AuthName "Please input ID and Password"
    AuthUserFile /絶対パス/htpassファイル
    AuthType Basic
    require user xxx
    </Limit>
    とPOSTメソッドにのみ制限をかけることによって閲覧可能で編集(の決定)不可という状態に出来ました。私が気がついたのではないのですが、どこかのページでWikiは編集決定時にデータをPOSTメソッドにて送っていると書いてあったので、そこだけ制限をかけることによってそれっぽく動いてくれました。
    ただ、BBS部分においてはうまく「誰でも書き込める」状態に区分けすることが出来なかったため(たぶん出来ないことはないと思いますが)#iframeプラグインを使用させてもらい、従来のCGI掲示板を表示しています。
    こんな感じになりました(まだ従来のHTMLから移行中)
    • reimy 2004-06-01 (TUE) 02:08:32

      POSTメソッドを使うarticleやlookup、searchなど一部のプラグインやコマンドで制限が出てしまうと思いますが、通常の使用では問題ないでしょう。

      search.inc.phpはGETメソッドに書き換えた方がいいかも。dev:BugTrack/584参照。

      • 名無しさん 2004-06-18 (FRI) 17:12:08

        MenuBarなどにlookupを使って検索窓を設置している場合は、searchプラグインの他にlookupプラグインのメソッドもGETにしておかないといけないようです。

  • ray? 2004-06-01 (TUE) 03:31:15

    さっそくsearchをGETメソッドに書き換えました。
    需要はすごく少ないんでしょうけど、普通の入力フォームによる認証が出来るとCGI版PHPの環境でも(それ以外にBasic認証をさける必要性があるか謎ですが)救われるなぁ、と思わず勝手なことを考えてしまいました。
    ともあれ、数々の丁寧な回答、本当にありがとうございました。

  • さばぞう 2004-06-01 (TUE) 13:13:25

    こんなページをみつけましたが、質問された方もできてないようで、できるかどうか怪しいです。時間があれば試してみては。

    • ray? 2004-06-08 (TUE) 00:16:25

      それに対するレスでも書いてありますが、結局Basic認証は通らないようです。

  • T.S? 2007-11-19 (月) 10:11:36

    mod_setenvif が使えれば,.htaccess に以下の記述でできるかも.
    少なくとも,こちらの環境ではできてます.
    Apache/2.2.3 + PHP/5.2.5 + PukiWiki/1.4.7

    SetEnvIfNoCase Authorization "^(Basic .*)$" HTTP_AUTHORIZATION=$1
    • Apache1.4系+ PHP/5.2.5 + PukiWiki/1.4.7ではだめでした>< -- @@? 2008-01-10 (木) 16:49:23
    • Apache 1.3.41でも、書き方変えたらできました。 -- ぽて? 2009-07-22 (水) 09:00:28
      1. .htaccessにBASE64でユーザ名:パスワードを追加する。

        Apache1.3では、HTTP_AUTHORIZATION=$1の$1が置き換えられないので...

        SetEnvIfNoCase Authorization "^(Basic dGVzdDpob2dlaG9nZQ==)$" HTTP_AUTHORIZATION='dGVzdDpob2dlaG9nZQ=='
        ユーザ名:パスワードBASE64
        test:hogehogedGVzdDpob2dlaG9nZQ==
      2. lib/auth.php auth.phpファイルの次の一部を変更する。
        isset($_SERVER['HTTP_AUTHORIZATION']) &&
          preg_match('/^Basic (.*)$/', $_SERVER['HTTP_AUTHORIZATION'], $matches))
        isset($_SERVER['HTTP_AUTHORIZATION']) &&
          preg_match('/^(.*)$/', $_SERVER['HTTP_AUTHORIZATION'], $matches))
        上手く行かなければ、$_SERVER['HTTP_AUTHORIZATION']を
        $_ENV['HTTP_AUTHORIZATION']に置き換える。
        これで、上手く行くかも。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-04-15 (木) 17:28:25
Site admin: PukiWiki Development Team

PukiWiki 1.5.1+ © 2001-2016 PukiWiki Development Team. Powered by PHP 5.6.38-0+deb8u1. HTML convert time: 0.189 sec.

OSDN