オワタブログ

2ちゃんまとめサイト、アンテナサイト、アダルトサイトの作り方と稼ぎ方

Nginx で画像の直リンク対策を考える

コンサルしているサイトさんで、画像の直リンク対策を実装してみました。
運営方針によって実装方法は変わりますので、ホワイトリスト方式ブラックリスト方式で対策できるようにしてみました。

画像の直リンク問題と対策

画像の直リンクとは

直リンク(じかリンク、ちょくリンク)とは、インターネットのWWWで公開されている画像などのメディアファイルのURLを参照し、インラインで表示する形態で別のウェブサイトにあるウェブページに貼り付けたり、リンクを張ったりする事。直リンとも。トップページ以外のサイト記事のURLに対してリンクを張ることについてはディープリンクを参照。

引用元 : https://ja.wikipedia.org/wiki/直リンク

画像の直リンクを防ぎたい理由

スクレイピングサイト*1や画像の直リンクを行っているブログパーツに自サイトが掲載されてしまいました。
テキストは相手サーバーに存在するのでこちらの負荷にはなりませんが、画像の直リンクは、先方のサイトから読み込まれるたびにこちらのサーバーの負荷になります。
その結果、自サイトのアクセスは増えていないにも関わらず負荷だけが増えていきました。

ホワイトリスト方式

設定方法

/etc/nginx/blacklist.confブラックリストを記載

# /etc/nginx/blacklist.conf

map $http_referer $bad_referer {
    hostnames;

    default                           0;

    # ブラックリスト一覧を記載
    "~social-buttons.com"             1;
}

/etc/nginx/nginx.confからブラックリストを読み込み

# /etc/nginx/nginx.conf

http {
# ...

  include blacklist.conf;

# ...

}

/etc/nginx/sites-enabled/mysite.confを編集して、サイトごとの設定ファイルにブラックリストの分岐を追加

# /etc/nginx/sites-enabled/mysite.conf

server {
  # ...
location ~* \.(jpg|jpeg|gif|png|ico)$ {
  if ($bad_referer) { 
    return 403; 
  } 
}
  # ...
}

アクセス拒否できているか確認

 $ curl --referer http://social-buttons.com  http://hoge.com/test.jpg

ブラックリスト方式

設定方法

location ~* \.(jpg|jpeg|gif|png|ico)$ {
    valid_referers none server_names blocked *.google.co.jp *.yahoo.co.jp;
    if ($invalid_referer) {                                         
        return 403;                                                 
    }                                                            
}

自サイト、リファラーなし、google.co.jp、yahoo.co.jpを許可。
ここでは、例として以上のリファラーを許可し、それ以外は403 forbidden (閲覧禁止)を返却するという設定をしています。

一歩先の方法はないものか

実装しながら思ったことがあります。
もしかしたら、直リンクしてるサイト側にも悪意がまったくないのかもしれません。
ユーザー投稿型のサイトだったら、勝手にユーザーが直リンクを掲載してる可能性だってあります。

つまり、単に直リンクされたから禁止、とするのは最善の手段ではないと言えます。
直リンクされているサイトの運営者に一度連絡を取ってみて、双方で話し合って改善策を出したほうがいいこともあるでしょう。

そこから思いもよらぬ関係性が構築できて、メディアの成長につながるかもしれません。

繰り返します。
禁止するだけが、最善の手段ではありません。

この記事を書いた人

twitter.com

*1:スクレイピングサイトとは、他のWebページからコンテンツの一部を抜き出し、自分のWebページのコンテンツとして使用しているWebサイトのことである。