2009-07-16 7 views
0

今日は何が行われているのか分かりません。ログインしない限りイメージのホットリンクを許可しない

私はいくつかのことを知っている:サイトは画像ギャラリーがあり、PHP で行われ 、urlは http://www.example.com/girls/Cyn/sets/getImage/1170753147/7.jpg

ようなものになるだろう、私は限り私がログインしていて、そのURLを見ることができますサイト。私はURLを取得し、ブラウザで新しいウィンドウを作成し、まだログインしている間にロードすることができたので、リファラーベースではないようです。

私がログアウトすると、私はplease register/loginページにリダイレクトされます。

これは重いヒットサイトです。

これはどのように行われますか?私は彼らがセントでApacheを実行していると言うことができます。私がログインすると、私は何かのハッシュを持っているクッキーが与えられています。私は彼らがIDを検索してログインできることを確認していると確信しています。

しかし、 jpgだけのリソースをリクエストしてください。その要求の状態を見るためには、Apacheとの通信やデータベースが必要です。どのようにURLをロードするだけで、それをデータベースに渡すことができるApacheのCookie値を送信するのでしょうか?

私は有料会員制サイトに着手しようとしており、同じ方法で画像を保護する必要があります。これはhttp認証ではなく、これはフォームベースのログインであり、これがどのように行われたかについては迷っています。何か案は?

+0

メンバーを? –

答えて

2

おそらく認証にセッションクッキーを使用し、セッションが認証されていない場合はリダイレクトするWebアプリケーションです。

ほとんどのWebフレームワークには、この種のプラグインがあります。それを行うためのApacheモジュールがあるかもしれませんが、私はそれを見ていません。

3

すべてのリクエストはWebサーバーを経由します。サイトがCookieを設定すると、そのサイトへのすべてのリクエストには、そのCookieの有効期限が切れるか削除されるまでCookieの内容が含まれます。あなたが要求しているものは問題ではありません。要求している場所だけです。

firebugこのサイトにいるときに[ネット]タブを開いて、すべてのリクエストを確認してください。リクエストヘッダーに「Cookie」行が表示されます。これは、要求されたすべてのリソース(イメージ、スタイルシート、すべて)に適用されます。

ApacheがWebサーバーの場合は、mod_rewriteを使用してリクエストを指示するか、PHPまたはPerlなどに渡して、Cookieをチェックして有効であればイメージを出力します。

if(valid_auth($_COOKIE['auth'])) { 

    // open the file in a binary mode 
    $name = './img/ok.png'; 
    $fp = fopen($name, 'rb'); 

    // send the right headers 
    header("Content-Type: image/png"); 
    header("Content-Length: " . filesize($name)); 

    // dump the picture and stop the script 
    fpassthru($fp); 
    exit; 

} else { 

    header('Location: /login'); 
    exit; 
} 
0

しかしながら、上記だけJPGであるリソースに対する直接の要求である:ここ

はPHPの例(php.netから撮影された画像出力)です。その要求の状態を見るためには、Apacheとの通信やデータベースが必要です。どのようにURLをロードするだけで、それをデータベースに渡すことができるApacheのCookie値を送信するのでしょうか?

すべての単一のhttp要求がWebサーバーに送信されます。 Webサーバーは、一連の規則に基づいて要求の処理方法を決定します。デフォルトでは、Apacheには単純にハンドラがあり、要求されたファイルをユーザに送り返すだけです。しかし、PHPスクリプトですべてのリクエストを処理するようにApacheを設定できない理由はありません。トラフィックの多いサイトでは、これを多分解決するでしょう。なぜなら、画像を表示するたびにphpを起動するのはちょっとコストがかかるからです。理論的には、特定のパターンに一致するすべてのリクエストをパイプで渡すことができます^girls/Cyn/sets/getImage/.*)をphpスクリプトに追加します。このスクリプトは、Webルートの外側のどこかから実際のファイルを読み取り、それをユーザーに出力します。

1

イメージの「ゲッタ」を作成する必要があります。画像は、一般にアクセス可能なディレクトリの外にあるフォルダに保存する必要があります。今http://www.mysite.com/private_images

、 "ゲッター" のスクリプトを作成するには:あなたは時にディレクトリをprivate_images

/public_html 
    /js 
     jquery.js 
    index.php 
    getimage.php 

/private_images/ 
    myimage.jpg 

注意はアクセスできません。

/* This is getimage.php */ 
if(!isset($_SESSION['is_logged_in'])) { 
    header('Location: /login'); 
    exit; 
} 

/* 
Get the image_name from the URL 
You will be using something like: http://mysite.com?image_name=flowers.jpg 
This is the way to get the image. 
*/ 
$path = "/var/www/html/private_images" 
$name = $path.'/'.$_GET['image_name']; 
$fp = fopen($name, 'rb'); 

// send the right headers 
header("Content-Type: image/jpg"); 
header("Content-Length: " . filesize($name)); 

// dump the picture and stop the script 
fpassthru($fp); 
exit; 

あなたは上記のコメントを逃した場合は、画像取得するために、これを行うことができます:えっ、GodsGirls.comの

http://mysite.com?image_name=flowers.jpg 
関連する問題