1

ここの PHP 初心者は、ひどく下手なダウンロード システムに HTTP_REFERER ベースのセキュリティ機能を実装する方法を頭に入れようと、狂ったように頭を悩ませています。

基本的に、ファイル ダウンロード ページの URL の末尾に特定の文字列が追加されている場所があります。この特定の文字列は次のとおりです。

?thanks

それが URL に表示されている場合、ユーザーはそこにあるファイルをダウンロードできます。これはうまく機能しますが、URL 自体に「?thanks」の部分を追加するだけで、ページの「ロックを解除」するのは簡単です。ユーザーが不器用なセキュリティを回避し、プレミアム ファイルに簡単にアクセスできるようにします。

可能であれば、'?pending' を含むページから以前に到達しなかった文字列 '?thanks' を含むページにアクセスしようとすると、ホームページにリダイレクトされるセキュリティ対策を追加したいと考えています。それは私にとって完璧な解決策になります。

わかりやすくするために、一般的なダウンロード前のプロセスは次のようになります。

  • ユーザーがダウンロード ページにアクセス: [Web サイト]/download/page/123/
  • ユーザーが Recaptcha を完了すると、次の場所にリダイレクトされます: [website]/download/page/123/?pending
  • ユーザーが詳細を入力すると、ここにリダイレクトされます: [website]/download/page/123/?thanks
  • ユーザーがファイルを受け取る

長くなりましたが、私の変わった要件には理想的ではありません。また、ユーザーは最初に「?pending」を URL に追加し、その後に「?thanks」を追加することで、この問題を回避できる可能性が高いことも知っていますが、それでも、本当に、本当に、際限なく役立ちます。

では、StackOverflow さん、賢明で親切なコーダーで、駆け出しの Web デザイナーを助けてくれる人はいますか? すべての助けに感謝します。乾杯。

編集: ああ、最後に試みられたがひどく爆撃された失敗した方法が 1 つあります。念のため、それが私の目標をさらに説明するのに役立ちます:

if (('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] == wp_get_shortlink().'?thanks') && (isset($_SERVER['HTTP_REFERER']) && preg_match("/".preg_quote('?pending',"/")."/i",$_SERVER['HTTP_REFERER']))) {
    echo 'Hurrah!';
} else {
    echo 'Oh dear.';
}
4

2 に答える 2

2

すべてがリクエスト自体の情報に依存している場合、あなたがしようとしていることを強制する方法はありません。リファラーは単なる任意のリクエスト ヘッダーでもあります。

必要なのは、実際のサーバー側の状態です。ユーザーのセッションを開き、プロセスの各ページに渡されるランダムな一意の ID をプロセスに与え、セッションで次に表示される進行状況とメッセージを保存します。

于 2013-04-05T10:00:13.003 に答える
1

「HTTP_REFERER ベースのセキュリティ」のようなものはありません。それはオキシモロンです。

一般的なセキュリティのために、SESSION を使用する必要があります。そして、あなたの特定のケースでは、それも最適と思われます。どのページが訪問されたかという事実をセッションに保存し、他のページでその値を確認してください

于 2013-04-05T10:03:30.737 に答える