26

画像の多いサイトを作りたいです。しかし、Web サイトにアクセスせずに画像に直接リンクするなど、画像への直接アクセスから保護したいと考えています。

これを行うための好ましい方法は何ですか? そして、長所と短所の代替案は何ですか?

いくつかのアイデアがあります(可能かどうかはわかりません):

  • ファイルのアクセス許可
  • PHP セッション
  • 一時ファイル名または URL
  • HTTP リダイレクト?

たぶん、これは多くの Web サイトで実践されていないのでしょうか? たとえば、ログインせずに Facebook のプライベート写真にアクセスしようとしましたが、それでも写真にアクセスできました。

プラットフォームは、おそらく NginX と PHP を備えた Ubuntu マシンになります。

4

10 に答える 10

24

http://us3.php.net/image

img 要素を php ファイルにリンクします。このファイルは、ユーザーが適切なパーミッションを持っているかどうかをチェックし、もしそうなら img レスポンスを送り返すことができます。

<img src="url/LoadImg.php?id=1337" alt="" />

それでも、許可を得た人は画像をダウンロードして、別の場所 (ウェブスペース/メール/その他) に提供することができます。盗むのを少し難しくするために、画像の右クリックを無効にすることができますが、それでも http について少し知っているユーザーは盗むのに問題はないはずです。画像の上に署名 (たとえば、Web サイトのロゴ/名前) を配置して、ソースがどこにあるのかを人々に知らせることができます。これは、php でも実行できます。

おかしくなりたい場合は、リンクが他のページから来た場合に送信される他の画像をセットアップできます:P

于 2010-10-21T17:52:04.900 に答える
16

.htaccess次の行を使用して、サイトフォルダに簡単なファイルを追加します

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www\.your-domain\.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www\.your-domain\.com$ [NC]
RewriteRule .*\.(wav|swf|jpg|jpeg|gif|png|bmp|js|css)$ - [F,NC,L]

注:それらをこすり取ろうとする人を見つけるのは奇妙だと思っていても、私も追加jsしてファイルします。css

于 2012-12-01T12:38:12.153 に答える
10

htaccess とユーザーの IP を使用して、フォルダーを動的に保護できます。

次の行を含む .htaccess ファイルを images フォルダーに追加します。

order deny,allow
deny from all

次に、PHP を使用して、次のようにログインするときに、ユーザーの IP を htaccess ファイルに挿入します。

<?
$ip = $_SERVER['REMOTE_ADDR'];
if (!filter_var($ip, FILTER_VALIDATE_IP)) exit();
$file = $_SERVER["DOCUMENT_ROOT"].'/YOUR_IMAGE_FOLDER/.htaccess';
$current = file_get_contents($file);
$current .= "allow from ".$_SERVER['REMOTE_ADDR']." #".$_SESSION['id']."\n";
file_put_contents($file, $current);
?>

フォルダーは、ログインしていない IP からブロックされます。

IPが有効かどうかを確認したことに注意してください。ユーザーが独自のコードを htaccess ファイルに挿入できないようにすることが重要です。

また、htaccess ファイルの ip の右側のコメントにユーザー ID を入れていることにも注意してください。ユーザーがログアウトすると、htaccess ファイルを検索して、ユーザーの IP を削除できます。

要求ごとにこれを更新して、動的 IP を使用しているユーザーがキックオフされるのを防ぐことができます。

私はこの方法をメンバーエリア全体で使用しています。これは優れたセキュリティ層です。ログインスクリプトをメンバーフォルダーの外に置くようにしてください。

于 2014-09-16T21:02:41.203 に答える
3

これは役に立つかもしれません: .htaccess による画像のホットリンクを許可/拒否する

編集: この方法について注意すべきことの 1 つは、一部のブラウザー/AV/ファイアウォール ソフトウェアは、閲覧時にリファラー データを削除することです。これにより、正当なユーザーがホットリンカーとして扱われる可能性があります。

サイトがすでに何らかの認証またはセッション システムを使用している場合は、@Mark Ba​​ijens の回答に記載されている方法を使用することをお勧めします。

更新: ホットリンクを防止するための NGINX 書き換えルール:

location ~* (\.jpg|\.png|\.css)$ {
    valid_referers blocked mydomain.com www.mydomain.com;
    if ($invalid_referer) {
        return 444;
    }
}
于 2010-10-21T17:53:43.877 に答える
3

次のようなものを使用して、PHP スクリプトを使用して画像を取得できます。

<img src="mysite.com/getimage.php?id=001" />

HTTP_REFERER のドメインが自分のものであることを確認した後にのみ、PHP スクリプトに画像データを返すようにします。

アカウント指向のサイトをお持ちの場合は、あなたが述べたように PHP セッションを使用し、画像データを返す前に PHP スクリプトでセッションを検証することをお勧めします。

于 2010-10-21T17:54:29.367 に答える
1

これを行うのは難しいでしょう。クライアントの Web ブラウザーが画像にアクセスできるようにするには、画像を読み取ることができる必要があります。ブラウザへのアクセスを許可する必要があるため、ファイルのアクセス許可は機能しません。誰かがそれらをダウンロードして何かをするのを止めることはできません.

直接リンクをやめたいだけなら、ファイル名を定期的に変更してページを更新すると、他のページのリンクが壊れてしまいます。

于 2010-10-21T17:53:26.707 に答える
0

.htaccess に拒否ルールを追加します

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd.*$ [NC] 
RewriteRule \.(gif|jpg|js|txt)$ /messageforcurious [L]
于 2016-12-06T10:55:02.250 に答える
0

上記の回答にはパフォーマンスの問題があります。私の解決策は、システムにログインすることです。

画像のディレクトリの名前を毎時/日などに変更できます。

images/2h4h4h4h4282hdj/182828.png のようなものに images/dhd777rhrje82883/182828.png

これは、システム全体または特定のユーザーに対して行うことができます。

于 2020-02-18T03:55:59.303 に答える