0

phpファイル(serveMedia.phpと呼びましょう)を介してindex.phpに写真とビデオを提供しています。私はmod_rewrite、php-sessions、およびURLに含まれるトークンを使用して、index.phpからこれらのメディアファイルを呼び出します。たとえばsrc="media=SOMEFILENAME&type=jpeg&token=2134573946284615492345" 、メディアファイル自体は.htaccess(deny from all)によってアクセスが制限されたフォルダーにあります。

今私の質問:このURLに私のindex.phpからのみアクセスできるようにする可能性はありますか?私が達成しようとしているのは、ユーザーがコンテンツを表示できるのは、コンテンツが私のページを介して配信されたときだけであり、そのURLにアクセスしたときは表示されないということです。

たぶん、私が知らない高度な.htaccessまたはphp-optionsがいくつかありますか?私はホストされたスペースにいるので、これら2つがおそらく私の唯一の選択肢です。

これは私が現在取り組んでいるものです:

index.php

ob_start();

session_start();

if (!isset($_SESSION['token']) || $_COOKIE['PHPSESSID'] !== session_id()){
    $token = md5(uniqid(rand(), true));
    $_SESSION['token'] = $token;
}
else {
    $token = $_SESSION['token'];
};

serveMedia.php:

if(isset($_GET['token']) 
    && $_GET['token'] == $_SESSION['token'] 
    && $_COOKIE['PHPSESSID'] == session_id()){

        //streamthisfile!

else {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
    echo "no file";
    session_regenerate_id(true);
    session_destroy();
    unset($_SESSION);
}

あなたの助けに感謝!

4

2 に答える 2

1

変数(現在の日付など)を暗号化し、それを「ゲート」リンクに配置します。新しいページに到達すると、スクリプトが変数を復号化し、変数が一致しないか、存在しない場合、スクリプトは別のページにリダイレクトします。

何かのようなもの:

     <a href="restricted.php?pass=eERadWRWE3ad=">Go!</a>

すべての暗号化/復号化を実行できるライブラリがいくつかあります。

それ以外の場合は、セッション、つまり以前のメソッドに依存する必要があります。または、HTTP_Refferer(信頼できない)を使用できます。

ここ: 特定のページから来た場合を除き、ページへのアクセスを制限する

于 2012-12-09T08:35:45.770 に答える
0

通常、HTTP ヘッダーrefererは画像リクエストのソース ページに設定されるため、それを使用してリソースを提供するかどうかを判断できます。

if($_SERVER['HTTP_REFERER'] == 'my/index.php') {
  //serve page
}
于 2012-12-08T11:44:50.487 に答える