[PHP-users 34469] Re: フォーム認証によるバイナリファイルへのアクセス制限の方法
安倍 雄一郎
y.abe @ abatous.jp
2009年 3月 26日 (木) 19:09:44 JST
安倍と申します。
PDFを直接アクセスさせずに、PHPから読み込んで返してみてはいかがでしょう?
PDFをapacheからアクセスできない別の場所に設置してPHPから読み込んで返せばうまくいくような気がします。
以下の例では、/pathtopdf/abcd.pdfとしてます。
実際には設置したPDFファイルのパスにしてください。
<?php
session_start();
if (auth() === false) {
// 認証されてなければログインページへ
header('Location: 'http://www.example.com/login.php');
} else {
// ファイルを読み込んで出力
$size = filesize('/pathtopdf/abcd.pdf');
header("Expires", gmdate("D, d M Y H:i:s",time() - 3600 * 24 * 365) . " GMT");
header ("Last-Modified", gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control", "must-revalidate, post-check=0,pre-check=0");
header ("Pragma", "private");
header ("Content-type", "application/octet-stream");
header ("Content-Disposition", "attachment; filename=abcd.pdf");
header ("Content-Length", $size);
$fp = fopen('/pathtopdf/abcd.pdf','rb');
fpassthru($fp);
fclose($fp);
}
?>
実際に動かしていないので、エラーがあったらご容赦ください。
以上、よろしくお願いいたします。
> -----Original Message-----
> From: php-users-bounces @ php.gr.jp [mailto:php-users-bounces @ php.gr.jp]
> On Behalf Of Hisamitsu Issei
> Sent: Thursday, March 26, 2009 6:12 PM
> To: PHP-users ML
> Subject: [PHP-users 34468] フォーム認証によるバイナリファイルへのアクセ
> ス制限の方法
>
> 久光と申します
>
>
> http://www.example.com/test/pdf/abcd.pdf
> のpdfファイルがあるとして、フォーム認証をした状態のユー
> ザーだけがこれを閲覧できるようにする方法を探しています
> (URLを直接入力しても閲覧できないようにする)。
>
> .htaccessに
> RewriteEngine on
> RewriteBase /
> RewriteRule test/pdf/(.*)$ auth_check.php?fn=%{REQUEST_FILENAME} [L]
> と書くことで、指定ディレクトリへのアクセスをいったんauth_check.php
> へ誘導することにしました。
>
> あとはauth_check.phpの中で認証状態を確認して、認証され
> ていなければログイン用のページへリダイレクト、認証されていれ
> ば元々のアクセス先へリダイレクト、と思ったのですが元々のアク
> セス先へリダイレクトしたら無限ループに入ってしまいます(当た
> り前ですよね)。
>
> <?php
> session_start();
> if (auth() === false) {
> // 認証されてなければログインページへ
> header('Location: 'http://www.example.com/login.php');
> } else {
> // 認証されていたら元のアドレスへ戻す
> header('Location: 'http://www.example.com/test/pdf/abcd.pdf');
> }
> ?>
>
> 単純に元のアドレスへリダイレクトせずにphpであと一工夫
> 加えれば解決できるのか、根本的に違う方法(phpとは関係ない方
> 法)が必要なのかがわかりません。よろしくお願いいたします。
>
>
>
>
>
>
> _______________________________________________
> PHP-users mailing list PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
PHP-users メーリングリストの案内