無断リンクを排除する
例によって夜中に目が冴えてしまったのでなんかして遊ぶ.
引用:
あなたが泣こうがわめこうが、技術的に排除しない限り無断リンクはなされるのだから。
というわけで,技術的に排除してみた.
1 #!/usr/bin/fridge
2 #usage : http://HostName?PageName
3 hostName="127.0.0.1"
4 htmlPath="./"
5
6 echo ,Content-Type: text/html
7 echo ,\n
8
9 pread "echo $HTTP_REFERER" fromLink
10 if (match fromLink "^http://"+hostName)<0 toPage="index.html"
11 else pread "echo $QUERY_STRING" toPage
12 pread "cat "+htmlPath+toPage htmlText
13 echo htmlText
14 return 0
15
ポリシーは「TOP以外にリンク貼らせない」.
コツはhtmlファイルをサーバのドキュメントルート以下のディレクトリ以外の場所におくようにすること.
CGIを通してしかhtmlファイルにアクセスすることができず,同一ホスト以外からのリンクから飛んできた人は全部TOPページに飛ぶ.
しかしプログラマはいいけども,そうじゃない人に「技術的に排除しろ」っていうのもなかなか無茶な話だと思う.(そもそも技術的に排除できる人は自分のサイトで無断リンクお断りとかあんま言い出さないよな)
ということは,オプションで「無断リンク強制排除」とかって機能をつけたホスティングサービスやBlogなんかのWEBツールが出たら金になるのかもしれない.
#追記-------------(2006/10/17 14:00)
コメント欄で指摘をうけたように,このままのスクリプトだと$HTTP_REFERERを偽装されただけで外からホスト内のファイルがまる見えになってしまうので,実際の運用では指定したディレクトリ以下のファイルしか閲覧できないように「../」などの危険な文字列を除去する処理等が必要になると思います.
これはそのままだとまずいですね。
#ホスト内のファイルがすべて見放題
投稿 y-Aki | 2006年10月17日 (火) 07時11分
本当だ.これじゃ$HTTP_REFERERをちょこっと偽装するだけでも全部まる見えになっちゃいますね.ご指摘ありがとうございます.
投稿 K.Tsuchiya | 2006年10月17日 (火) 09時05分