1

PDF ファイルへのリンクを含む Web ページ ("research.php") があり、ファイルが表示される前に免責事項 ("disclaimer.html") を表示したいと考えています。現時点では、HTTP_Referrer の値を確認し、免責事項ページからのものでない場合はリダイレクトすることで、これを達成しました。

コード:

$ref = $_SERVER['HTTP_REFERER'];

if($ref !== 'http://my.site.com/disclaimer.html') {
  die('<META HTTP-EQUIV="Refresh" CONTENT="0;URL=disclaimer.html">');}

研究ページには、.htaccess を使用したローカル アクセスに制限された別のディレクトリに保持されている PDF ファイルへのリンクが含まれています。PDF は、HTTP_Referrer もチェックする PHP スクリプト (「download.php」) によって提供されます。

HTTP_Referrer 変数がスプーフィングされ、このメソッドが安全でなくなる可能性があることを理解しており、いくつか質問があります。

まず、誰かが別の Web サイトから調査ページまたはダウンロード スクリプトに直接リンクし、訪問者が免責事項を回避できるように HTTP_Referrer をスプーフィングすることは可能ですか? 別の質問に基づいて、私の理解では、HTTP_Referrer は個人の PC では簡単に偽装できますが、Web サイトの訪問者に対してそれを行うのははるかに難しいということですか?

次に、download.php スクリプトをより安全にする方法はありますか?たとえば、.htaccess を使用してローカル アクセスに制限されたディレクトリに配置するなどです。私は現在、「a href="download.php?...」という形式の単純なリンクを使用してスクリプトを呼び出しているので、これは機能しないと理解していますが、それは正しいですか?

コメントをお待ちしております。肝心なのは、免責事項を表示したり、その Web サイトの所有者が実際に PDF を Web サイトに保存したりせずに、別の Web サイトのページまたはファイルにリンクすることを困難/不可能にしたいということです。どのソリューションにも特定の脆弱性があることは間違いありませんが、私が理解しようとしているのは、経験豊富な Web デザイナーが免責事項のページをバイパスするのがいかに難しいかということです。

更新: 以下の jszobody の応答は、これを行うためのより良い方法を明確に概説しているため、質問に答えています。 .

4

1 に答える 1

3

これにはセッションの使用を検討します。

disclaimer.php について:

session_start();
$_SESSION['viewed_disclaimer'] = true;

research.php について:

session_start();
if(!$_SESSION['viewed_disclaimer']) {
    header("Location: disclaimer.php");
    die();
}

あなたはアイデアを得る。直接リンクするのではなく、PHP パススルー スクリプトを使用して、個々の PDF ファイルを保護することもできます。

これを download.php と呼びます:

session_start();
if(!$_SESSION['viewed_disclaimer']) {
    header("Location: disclaimer.php");
    die();
}

$filename = basename($_GET['filename']);
if(file_exists("path/to/my/pdfs/" . $filename) { 
    // Send headers for a PDF file, and read out the file
}

download.php?filename=myfile.pdfこれで、research.php からリンクできます。

わかる?

于 2013-11-14T13:23:13.153 に答える