2014年4月2日水曜日

直リンク(直接URL入力でのアクセス)を禁止するhttpd.conf設定

Webサイトの内容によってはブラウザに直接URLを入力してアクセスされたくないページや外部のサイトからリンクされたくないページが存在する場合があります。

SetEnvIf Referer を設定すると指定ディレクトリ以下のページ(画像等を含む)への直リンクを禁止することが可能です。

OS: RedHat EL 6.5(64-bit)
Apache: 2.2.15


■httpd.confの最下行に追加
[root@centos65 ~]# tail /etc/httpd/conf/httpd.conf
# Direct Link ban
<Directory "/var/www/html/direct_ng">
    SetEnvIf Referer "^http://192.168.77.149/" allow_ref
    # External Links ban
    # SetEnvIf Referer "^$" allow_ref
    order deny,allow
    deny from all
    allow from env=allow_ref
    ErrorDocument 403 /403.html
</Directory>
[root@centos65 ~]#
SetEnvIf Referer の URLは「http://」から書き、先頭には半角で「^」(ハット)記号を加えた方が、アクセス制御レベルが高まります。
今回はコメントアウトしていますが、URL直入力は許可し外部サイトからのリンクを禁止する場合は、URLの部分を "^$" と記述します。
直リンクされた場合はステータスコード403が返るので、それに対応するページを準備します。

■動作確認
ブラウザに直接URLを入力して http://192.168.77.149/direct_ng/ にアクセスすると 403.html ページが表示されます。

403.html は5秒後に direct_ok ページに自動遷移するように設定しています。

http://192.168.77.149/direct_ok/ ページからリンクすれば http://192.168.77.149/direct_ng/ ページが表示されます。


■直リンクされたときのアクセスログ
[root@centos65 ~]# tail -f /var/log/httpd/access_log

192.168.77.13 - - [02/Apr/2014:23:33:04 +0900] "GET /direct_ng/ HTTP/1.1" 403 370 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36"
192.168.77.13 - - [02/Apr/2014:23:33:09 +0900] "GET /direct_ok/ HTTP/1.1" 200 338 "http://192.168.77.149/direct_ng/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36"
192.168.77.13 - - [02/Apr/2014:23:33:37 +0900] "GET /direct_ng/ HTTP/1.1" 200 284 "http://192.168.77.149/direct_ok/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36"

■テストページhtmlサンプル
## 直リンクOKページ
[root@centos65 ~]# cat /var/www/html/direct_ok/index.html
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Direct Link OK</title>
</head>
<body bgcolor="#33ffcc">
  <h1>Direct Link OK</h1>
  <h2>/var/www/html/direct_ok/index.html</h2>
  <a href="/direct_ng/">direct_ng</a><br />
</body>
</html>
[root@centos65 ~]#

## 直リンクNGページ
[root@centos65 ~]# cat /var/www/html/direct_ng/index.html
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Direct Link NG</title>
</head>
<body bgcolor="#ff6699">
  <h1>Direct Link NG</h1>
  <h2>/var/www/html/direct_ng/index.html</h2>
  <a href="/direct_ok/">direct_ok</a><br />
</body>
</html>
[root@centos65 ~]#

## 403ページ
[root@centos65 ~]# cat /var/www/html/403.html
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="refresh" content="5; url=/direct_ok/">
<title>Forbidden</title>
</head>
<body bgcolor="#cccccc">
  <h1>Forbidden</h1>
  <p>/var/www/html/403.html</p>
  <p>This page is not allowed to be Direct Link.</p>
  <a href="/direct_ok/">direct_ok</a><br />
</body>
</html>
[root@centos65 ~]#

こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い申し上げます。m(_ _)m

0 件のコメント:

コメントを投稿