6

私は個人的なポートフォリオのウェブサイトを持っています、そして私は次のようないくつかのpdfファイルを持っています

<a href="file.pdf">Some file</a>

誰もがファイルをダウンロードしたくないし、パスワードで保護して、知っている人だけと共有できるようにしたい。

正しいパスワードを与えた人だけが私のファイルをダウンロードできる場所

注:1。個人のポートフォリオWebサイトであるため、「ログイン」はありません
。2.レスポンシブコードとしてHTMLを使用してWebページを設計しました。

あなたの提案をお願いします、.htaccessなしでそれを行う方法は??

4

4 に答える 4

7

phpファイルを使用して、pdfファイルがNONPUBLICフォルダーに保存されている場所にファイルをフィードする必要があります。

たとえば、PDFを非公開のアクセス可能なディレクトリに配置します。たとえば、/ home /pdfs/としましょう。

そして、パブリックアクセス可能なディレクトリにあるPHPスクリプト、たとえば/ home / public_html /

パブリックディレクトリのスクリプト内に次のように配置します。

if (isset($_GET('password')) {
die('wrong password');
}

if ($_GET['password'] != 'mypass') {
die('wrong password');
}

$file="/home/pdfs/test.pdf";
header("Pragma: public");
header('Content-disposition: attachment; filename='.$file);
header("Content-type: ".mime_content_type($file));
header('Content-Transfer-Encoding: binary');
ob_clean();
flush();
readfile($file); 

GET値を使用してダウンロードするファイルを決定しますが、セキュリティを強化するには、.pdf拡張子のみを許可し、他のすべてのピリオドとスラッシュを削除して、サーバーのディレクトリを通過したり、パスワードなどを含む重要なセキュリティファイルが与えられたりしないようにします。さらに安全にするために、文字az0-9および-または_を使用してPDFファイルに名前を付けるだけです。

次に、ファイルをダウンロードする場合は、上記のスクリプトへの正しいURLを作成し、PDFファイルが非公開ディレクトリに存在することを確認します。

于 2012-10-30T20:03:44.310 に答える
3

好みに応じてMySQLまたはMySQLiteを使用し、PDFへのリンクをデータベースに保存します。次に、download.phpなどのスクリプトを使用します。ファイルのパスワードをデータベースに保存し、ファイルをダウンロードする前にユーザーにパスワードの入力を要求します。データベースに慣れていない場合は、すべてPHPで行うことができます。

非常に大まかなモックアップ(データベースがない場合、dbsに精通している場合は、それに応じて調整してください)

HTMLフォーム

<form name="download" id="download" method="post" action="download.php">
  <input type="password" id="password" name="password" />
  <input type="submit" id="submit" value="Download" />
</form>

PHP(download.php)

<?php
     // Get the password
          $pw = md5($_POST['password']);

     // Compare against the stored password
          $valid_pw = md5("your password you want to use");

          if($pw != $valid_pw){
               echo "Error! You do not have access to this file";
          }else{
               header("Location: /path/to/your/file.pdf");
          }
?>

ノート:

パスワードを暗号化する非常に基本的な方法を使用しました。これが私のアプリケーションであれば、より良い方法を研究したいと思いますが、簡潔さと理解を容易にするために、単純なmd5()ハッシュ比較を使用しました。

于 2012-10-30T19:48:35.880 に答える
3

@ rsmith84のヒントに従いますが、フォルダアクセスをブロックするようにしてください。

Apache.htaccessファイル

Deny from all

IISweb.configファイル

<system.webServer>
    <security>
        <authorization>
            <remove users="*" roles="" verbs="" />
            <add accessType="Allow" roles="Administrators" />
        </authorization>
    </security>
</system.webServer>

次に、PHPファイルでのみ配信を許可します。ユーザーを確認してreadfile('/protectd/file/path')から、保護されたフォルダーから実行します。

于 2012-10-30T20:02:56.377 に答える
2

たとえば、phpファイルを作成し、download.php代わりにそのファイルにリンクします。
そこで正しいパスワードを確認でき、正しい場合は、PDFファイルの内容を応答に書き込むことができます。

于 2012-10-30T19:45:58.227 に答える