2

-Imagesという名前のフォルダーがあります。このフォルダには、ユーザー プロファイルの写真が含まれています。現在、ユーザーは画像の URL をブラウザにコピーするだけで、いつでも自分の画像を見ることができます。このようにして、彼は他のユーザーのプロフィール写真も見ることができます。私が達成したいのは - ユーザーは、私のウェブサイトの PHP ページからのみ自分のプロフィール写真を見ることができるはずです。ユーザーが画像の URL を直接入力した場合、表示されるべきではありません。

.htaccess を使用してこれを達成しようとしました。これは私が.htaccessファイルに持っているものです:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mysite.com/
RewriteRule \.(gif|jpg)$ http://www.mysite.com/errorpost.jpg [R,L]

私は .htaccess が初めてです。これを達成する方法があれば、助けてください。

前もって感謝します。

4

1 に答える 1

3

私も同じ問題を抱えてる。現在、私は2つの方法を見つけました:

1) base64_encode() + ajax + js/jquery

  • base64_encode() によってエンコードされたすべての画像を、バイナリ ファイルまたはデータベースの OUTSIDE www フォルダーに保存します。
  • ajax を使用してそのデータを取得します。「data:image/jpeg;base64,$enc_imgbinary」を返す必要があります
  • js/jquery を使用して、「img」属性の「src」を返された結果に置き換えます

長所

  • 直接リンクで画像にアクセスすることはできません

短所

  • ビデオの同様のソリューションが見つかりませんでした。
  • サーバーのCPU使用率を最小限に抑えるために、画像は事前に(または最初の使用時に)エンコードする必要があります。
  • エンコードされた画像は、ディスク上で約 30% 多くのスペースを必要とします => 1.3 倍のディスク スペース
  • 元の画像をサーバーに保持したい場合 => 2.3x のディスク容量。
  • ~30% 多くのデータがネットワーク経由で送信されます

2) 長いランダム名 (+シンボリックリンク)

A) 長いランダムな名前を使用して画像を www フォルダーに保存する
B) www フォルダーへのシンボリック リンクを使用して画像を www フォルダー外に保存する。(www 以外の画像もデスクトップ画像のバックアップとして機能します)

ノート:

  • フォルダーにはランダムなシンボルも含まれている必要があります
  • 使用する '。' フォルダーまたはファイル名の前 => 念のため、未構成の apache でフォルダーの内容が表示されないようにするため
  • ケース B) でシンボリックリンクをたどるように Apache を構成します (FlowSymlinks を httpd.conf に追加します)。
  • フォルダーの内容が一覧表示されないように apache を構成します (httpd.conf からインデックスを削除します)。
  • 画像階層の例:

    • www
      • .media_jmdue7jed
        • .user1_hash_!sdfsewewfsdfsds
          • .album1_name_!jfie8e7y77667fef
            • .photo1_name_!kjio9i890v8fsd978fyreshf
            • .photo2_name_!09098dfuujdsif87s7ysdffd
            • ...
          • .album2_name_!ghhyuflp!huidfjh
            • .photo1_name_!feojihudhufuuhfrufhi8484
            • .photo2_name_!2344gfdgfdgdfefedw232sdg
            • ...
        • .user1_hash_!j333re89dsfdsf
          • ...

長所:

  • 動画にも使える
  • 長いランダム名を使用して www フォルダーへのシンボリック リンクを作成することにより、元の画像を www フォルダーの外部に元の名前で保持することができます。ユーザーごとに異なります。
  • 画像はサーバー外で使用できます(フォーラムでは、直接リンクを友人などにすばやく送信できます)

短所

  • シンボリックリンクは事前に (またはその場で) 作成する必要があります
  • 画像は直接リンクでアクセスできます
    • ただし、それを推測することはほとんど不可能です
    • また、シンボリックリンクのランダム名を定期的に、または画像の権利が変更されたときに変更することもできます(私はgoogle +がそうしていると思います)
  • map original-name → long-random-name は db (または sidecard/meta ファイル) に保存する必要があります
    • (エンコード/デコードまたは元の名前 + 長いランダム名を組み合わせることによって、元の名前を長いランダム名内に保持する場合はバイパスできます)

=====================================

ケース 1) を実装しましたが、問題なく動作しましたが、HTML5 ビデオの同様のソリューションは見つかりませんでした。

ケース 2) はより柔軟に見えます。しかし、私はまだセキュリティについて確信が持てません。誰かがセキュリティ ホールを見たら、私に知らせてください。

于 2013-05-08T08:50:07.667 に答える