ホームページ作成/アクセス制限・認証、サイト内検索

直リンクを防ぐには?…禁止と言っても無駄(3ページ目)

画像ファイルなどへの直リンク(外部サイトからの直接参照)や、特定ページへのディープリンクを防ぎたい場合に、「禁止します」と宣言しても意味がありません。どうしてもリンクを阻止したい場合は、技術的にアクセス制限を施すしかありません。リンクを技術的に防ぐ(リンクされてもForbiddenエラーを表示する)方法をご紹介。

西村 文宏

執筆者:西村 文宏

ホームページ作成ガイド

直リンクを禁止する.htaccessソースの解説

前のページでご紹介した直リンクやディープリンクなどを禁止するための.htaccessファイルの中身は、下記の5行でした。
SetEnvIf Referer "^http://allabout\.co\.jp" ShowOK
SetEnvIf Referer "^$" ShowOK
order deny,allow
deny from all
allow from env=ShowOK
この中身の意味を、1行ずつ以下に解説いたします。

1行目:許可するURLの記述
SetEnvIf Referer "^http://allabout\.co\.jp" ShowOK
SetEnvIfは「条件が成立した場合に環境変数を設定する」という意味です。ここでは、
  • Referer(参照元)に
  • 「http://allabout.co.jp」という文字列が含まれていた場合に
  • 環境変数「ShowOK」を設定する
という意味になります。

リンクされた場合の動作は以下のようになります。
  • もし、自サイト(ここではallabout.co.jp)内からのリンクなら、Refererには「http://allabout.co.jp」という文字列が含まれているはずなので、この条件が成立します。その結果、環境変数「ShowOK」が設定されます。
  • しかし、外部サイトからのリンクなら、Refererには外部サイトのURLが含まれますから条件は成立しません。その結果、何の環境変数も設定されません。

なお、URLを記述する際には以下の3点に注意して下さい。
  • URLを記述する際には、ドット記号「.」は「\.」のように半角の円記号(=バックスラッシュ)を前に加える必要があります。
  • URLは「http://」から書き、先頭には半角のハット記号「^」を加えます。
  • ドメイン名の先頭に「www」がある場合、「www」を省略しても同じサイトにアクセスできる場合があります(例えば、http://www.example.com/ でも http://example.com/ でもアクセスできるなど)。その場合は、両方のURLを記述しておきましょう。
※許可したいURLが複数ある場合は、この行を必要なだけ列挙します。
※先の2点は、正規表現という記述方法を使っているための仕様です。これらを省略しても動作はしますが、省略するとリンク元ページに少し工夫をするだけでアクセス制限を無効にできてしまいます。

2行目:Referer情報がない場合も許可する記述
SetEnvIf Referer "^$" ShowOK
この記述は、「Referer情報が得られなかった場合」に環境変数を設定する記述です。この記述は、次の2点への対処のために必要です。

  1. セキュリティソフト利用者への対処
    ブラウザがウェブサーバに対してReferer情報を提供するのを阻止するセキュリティソフトがあります。そのようなユーザに対しては、アクセスを許可して良いはずの場面でアクセスを拒否してしまうことになります。それを防ぐために、Referer情報が得られなかった場合には無条件で許可するようにします。
  2. URLを直接アドレス欄に打ち込んでアクセスした場合への対処
    ここではリンクを防ぎたいだけなので、URLを直接入力してアクセスされた場合には許可する必要があります(※URLを直接入力した場合は、「直前にアクセスしたページはない」ので、Referer情報はありません)。

※上記のように「^$」と書くと「なし」という意味になるのは、正規表現で「^」は先頭を、「$」は末尾を表すためです。先頭と末尾の間に何も存在しないので、「何もない」という意味になります。

3行目:許可と拒否の評価順の指定
order deny,allow
この記述は、アクセス拒否(deny)とアクセス許可(allow)のどちらを先に評価(解釈)するかを指定する記述です。ここでは必ず上記のように記述します。ここでは「deny,allow」と記述しているので、「許可(allow)」よりも「拒否(deny)」の記述が先に評価されます。

4行目:すべてを拒否する記述
deny from all
これは、「すべてのアクセスを拒否する」という意味の記述です。

5行目:先ほどの条件に合致した場合のみ許可する記述
allow from env=ShowOK
これは、「env(環境変数)に『ShowOK』が設定されている場合だけ許可する」という意味の記述です。

3行目で、「許可(allow)」よりも「拒否(deny)」の記述が先に評価されるよう記述しているので、4行目と5行目の記述は合わせて以下の意味になります。
  • 「すべてのアクセスを拒否する」
  • ただし、env(環境変数)に『ShowOK』が設定されていれば許可する」

なお、「env(環境変数)に『ShowOK』が設定されている」とは、1行目と2行目に記述した条件のどちらかに合致する場合のことです。

アクセス拒否の場合に独自のメッセージを表示するには

本記事でご紹介した方法を使ってアクセスが拒否された場合には、閲覧者のブラウザには「403 Forbidden」というエラーメッセージが表示されます。

この「403 Forbidden」エラーメッセージは、.htaccessファイルに記述を加えることで自由に書き換えられます。詳しくは、記事「Not Found などのエラーメッセージを自由に書き換えたい」で解説していますので別途ご参照下さい。

直リンクやディープリンクを防ぐ技術的な方法

今回は、外部サイトからのリンク(直リンクやディープリンク)を技術的に拒否する方法をご紹介いたしました。「リンク禁止!」などと宣言をしても意味はありません。本当に禁止したいなら、本記事でご紹介したような技術的な方法を使う必要があります。本当に必要な場合には試してみて下さい。

【関連記事】

【編集部おすすめの購入サイト】
楽天市場でホームページ作成関連の書籍を見るAmazon でホームページ作成の参考書を見る
  • 前のページへ
  • 1
  • 2
  • 3
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます