ホームページ作成 ≫ 簡単セキュリティ
目次
ここでは簡単なセキュリティについて説明します。
1.はじめに&技術の要らないセキュリティ
2.ログを取る
3.ロボットを使う
4..htaccessによるアクセス制限をする
5.メンバー専用ページを作る
おまけ .htaccessファイルの他の利用方法
1.はじめに&技術の要らないセキュリティ
作成したホームページは、不特定多数の人に見てもらう事が前提になっています。
しかし、サイトの閲覧者が全員善意を持った人とは限りません。
多くの人に見てもらえばもらうほど、サイトの運営が危険に晒される可能性も高くなります。
ハッキリ言うとネットの世界は誰も守ってくれません。自分の身(サイト)は自分で守る必要があります。
もちろん悪質な攻撃に関しては相手方のプロバイダへ連絡するなり、出るところへ出たり・・と別機関を頼ることができますが、基本は自衛です。

運営上のトラブルと言うと、一般的にはメールやCGIでの嫌がらせや困った人物への対応があげられます。
まず最初は、いらぬトラブルを招かないための準備と普段からの心備えについて説明します。
- ○サイト上での連絡用メールはWebメールを使う
- サイトにメールアドレスを載せていると、悪戯以外にも勧誘等色々危険かつ余計なメールが送られてきます。そんなに色々なサイトにリンクしてもらっていない場合や、ロボットを使っている場合はあまりその心配は少なくなりますが、それでもたまに勧誘メールなどは入ってきます。
基本はムシして捨てればいいだけですが、念のためにフリーのWebメールのアカウントを取って、それをサイト連絡用に利用しましょう。
それ以前に、連絡はメールフォームなどを利用して、アドレスを載せないほうが無難です。
- ○ケンカは売らない
-
不特定多数の誰が見るかわからないサイトで、やけにケンカ腰だったり顰蹙を買う文章を書いたりすると攻撃されます。
「攻撃された!!」と騒いでいるサイトさんを見ると確実にこの条件が当てはまります。
勢いにまかせて書いたものの、後で自分で見返したら頭を抱えたくなる文章は結構出てきます(人のことは言えませんが…)。落ち着いたらサイトを見直して見ましょう。
- ○自分でできる範囲の事をする
-
CGIを使ったカウンタやアクセスログ・掲示板・アンケートなどは第三者の意思一つでどうにでもなる機能です。
たとえどんなにおとなしくひっそりとサイト運営していたとしても、悪意のある人にブチあたってしまえばそれまでです。そんな時に掲示板などのCGIを設置していたら相手に色々されてしまうことは明白です。また、悪意はなくてもどうにもこうにも困った書き込みをする人は存在します。
困った書き込みに関しては放っておく・削除する・厳しく対応する・やさしく対応する・・・等などそれはその人次第です。
カウンタやアクセスログも、同じIPから少し連続したアクセスがあっただけで心配で夜も眠れない人は置かない方が懸命です。これも立派な自己防衛になります。
- ○リンクは選ぶ
-
サイトが出来たら、自分で検索エンジンに登録したり、他のサイト様へリンクをお願いしたりして他の人に見てもらいます。
ですが、この時に「何が何でもアクセスさえ伸びれば良いや!」と手当たり次第登録していると、その分危険は増えます。余計な勧誘メールの大半はリンク集などのサイトから辿ってやってきてアドレスを自動的に収集しています。
また、URLや内容変更などがあると変更してまわるのが大変になります。勝手にリンクされちゃうものは仕方ありませんが、自力でやる分は、自分で管理できる分だけにしておくのが無難です。
2.ログを取る
何かあった時のためにアクセスログを取っておいたり、アクセス解析をしこんでおくと便利です。
悪質な攻撃やいやがらせは、相手方のプロバイダに連絡すれば対応してくれます。最低限アクセスしてきた時間とIPアドレス、リンク元のURLがわかるアクセスログを取っておきます。色々な条件によりログが全てを解決してくれるわけではありませんが、何かあった時にあると便利です。
アクセスログはCGIが無料で配布されていたり、広告を兼ねたフリーのCGIをレンタルできます。
アクセス解析は、結果を分析することでアクセスアップにも繋がります。こちらは「解析ツールをいれる」で紹介しているので、入れたいひとは参考にしてください。
3.ロボットを使う
WebRobotという言葉を聞いたことのある人もいると思います。
WWWで使われている文書は大抵HTMLで書かれています。これは、『リンク』機能を実現した言語なので、インターネットの世界はこの『リンク』によって繋がっています。
検索エンジンは、自分で登録する場合もありますが、ロボットと呼ばれる巡回方法であるサイトからリンクされている全てのリンクを辿りサイトを集めてきて自動的にリンク集を作るものもあります。
つまり、どこか一つでも自分のサイトがリンクされていれば、そこから芋ズル式に自分のサイトの全てのページをロボットが辿って検索エンジンに登録してしまいます。
普通に公開しているサイトなら勝手にロボットを使った検索エンジンに登録されてもかまいませんが、中にはどうしても自分の意思でリンクをお願いする場合を除いて勝手に検索エンジンに拾って欲しくないページも存在することがあります。
ロボットがサイトに回ってきた時に「ここは拾っていいよ or ダメだよ」と制御するには、通常サーバ全体でドキュメントルートにrobots.txtというファイルを置いて対応します。これに全体が従うわけですが、個別の領域で独自に設定を行いたいことも出てきます。
/DocumentRoot
robots.txt
/index.html
/secret/ ←ここから下はロボットに拾ってほしくない!
そんな時は、制御したいHTMLファイルに特定のmetaタグを入れることによって勝手に登録されるのを避ける事ができます。
この場合、secretフォルダ下のファイルは、secret/index.htmlの中から全部繋がっていると考えて、入り口となるこのHTMLファイルの
<head>~</head>
の間に次のmeteタグを書きましょう。
そのページも含めた全てのページを登録させない
<meta name="robots" content="noindex,nofollow">
この場合、そのページと、そこからリンクされている全てのページが登録されません。
つまり、自分のページが入り口となるindex.htmlファイルを基点にして全てのコーナーがリンクされていれば、index.htmlファイルのhead部分にこれを入れておくだけです。
TOPページ以外のページもどこからか直接リンクされている場合もあります。それが心配な時は、めんどうですが全てのファイルのhead部分に入れておく必要があります。
そのページは拾わせるけど、そこから先のリンクは登録させない
<meta name="robots" content="index,nofollow">
この場合、そのページの内容だけは登録させます。しかし、そこからリンクされている全てのページは拾わせません。
そのページもリンクも全て登録させる
<meta name="robots" content="index,follow">
何も書かない場合はこの指定がされたことになります。つまり、ロボットが来たらそのページとそこからリンクされている全てのページも登録OKになります。
キャッシュをさせない
<meta name="robots" content="noarchive">
自分のサーバ上では消してしまったページでも、他のマシンがそのページの内容をキャッシュとして持っているといつまでもページの内容が見られてしまいます。
よって、このキャッシュ機能をやめてもらうように宣言します。
まとめると、自力で登録したページ以外は全て検索エンジンに拾って欲しくない場合、
<meta name="robots" content="noindex,nofollow">
<meta name="robots" content="noarchive">
と2つmetaタグを書いておくと有効です。
これはあくまで自動収集のロボットに関してのみ有効です。自力でリンク集を作っている人には通用しません。また、ロボットにも良い・悪いがありまして、悪質なロボット・・・つまりrobots.txtファイルやmetaタグルールを無視するロボットも存在します。
そんな時はいくらこちらが対処していてもムダです。拾われてしまいます。
それは防ぎようがないので仕方ありませんが、その後の対処方法はあります。
まず、どこのサイト(検索エンジン)からリンクされているかアクセスログを使って調べ、そこからのリンクを辿ってきた場合ページに入らせません。この方法は次の.htaccessによるアクセス制御で説明します。
4..htaccessによるアクセス制限をする
どういう理由であれアクセスして欲しくない人が出てきてしまった場合、相手のアクセスを弾く事が出来ます。また、不正なリンクからのアクセスも弾く事ができます。
ウェブサーバは色々な設定が書いてある設定ファイルに基づいて動作しています。それは特定のディレクトリ下のみで個別に動作制御を設定することも可能です。
つまり、個人でどこかのサーバの領域を借りている場合、自分の領域の下のみ独自の設定をすることが出来ます。皆様が借りているサーバの規約で「.htaccess利用可」となっている場合に利用できます。使用したい場合は各自で確認して下さい。
利用可となっているサーバでは、「.htaccess」という名前のファイルを作って、そこに設定したい内容を書いてサーバ上に置いておくと色々なアクセス制御が可能になります。
ここでは.htaccess内で出来る事のうち、個人的に「使える」と思ったことのみ紹介します。
*.htaccess使用可となっているサーバでも、全ての機能が使えるわけではありませんので、この辺も各自のサーバ利用規約をよく読んで確認して下さい。
基本
まず、PC上で下記の項目の中から目的にあった内容で.htaccessファイルを作成します。これはHTMLファイルと同様にメモ帳などのテキストエディタで作れます。
この時、OSやエディタによっては「.htaccess」という名前では作成できません。(accessを拡張子と見なされて、「ファイル名を指定して下さい」と言われます)
そんな時はとりあえず適当な「htaccess.txt」やら「htaccess」なんてファイル名で保存して下さい。サーバ上に上げた時に名前を変更すればOKです。
次に作成したファイルをサーバ上にアップします。
.htaccessは、そのファイルを置いたディレクトリとその下にあるディレクトリ全てに有効になるので置く場所を間違えずにアップして下さい。
先ほど適当な名前で保存しておいた場合は、サーバ上で「.htaccess」にファイル名を変更します。FTPソフトのRename機能を使って下さい。
早速テストしてみましょう。
思ったとおりに動かなかったり「Internal Server Error」が出たら文法間違いなのでもう一度見直してみましょう。
最後に注意しなければならないのは、この制御ファイル自身の中身が他の人から見えるようですと非常におマヌケです。ファイルをhttp://www.ahoaho.co.jp/hogehoge/.htaccessに置いた場合、そのファイルがブラウザから見れないかどうか確認して下さい。またはファイルの一覧が見えてしまうのもマヌケなので、もしも見えてしまった場合は、中身が空のindex.htmlファイルを置くか、こちらで対応して下さい。
.htaccessの設定内容1(ホストによる制御)
アクセスしてきた相手のホストによるアクセス制限を行います。
例えば掲示板に決まった人が悪戯をして困る!とか言う場合に制限をかけることができます。
この人のホスト名がalice.ahoaho.ne.jpだった場合、
order allow,deny
allow from all
deny from alice.ahoaho.ne.jp
とすればalice.ahoaho.ne.jpからアクセスしてきたホストははじかれます。
問題の弾きたいホスト名ですが、これはアクセスログから取ります。
この3行だけ書いた.htaccessファイルを作り、掲示板CGIの置いてあるディレクトリに設置します。サイト全体で入ってこれなくするには、自分の領域の一番上のディレクトリにこのファイルを設置します。
ただし、大抵の人は毎回決まったホストからアクセスしてくるとは限りません。
ADSLやダイヤルアップ接続をしている場合、一度アクセスを切ってもう一度ネットワークにつなぎなおすと別のIPアドレスになっているはずです。
例えば、ある“ahoaho.ne.jp”というISPと契約している場合。最初つないだ時は 12345678.ahoaho.ne.jp だったのに、次に繋いだ時は 87654321.ahoaho.ne.jp だったりなんかします。
仕方ないので、
order allow,deny
allow from all
deny from .ahoaho.ne.jp
とやると “ahoaho.ne.jp”と付くドメインからアクセスしてきたユーザは全てはじかれます。
しかし、この場合特定の人をはじいてるわけではないので、はじきたくないユーザが同じドメインの場合はそちらも一緒にはじかれてしまいます。
しかも問題のある人が別のドメインからアクセスしてきたり、プロバイダを変えたりしたらそれまでです。が、一時の時間稼ぎにはなります。
○.htaccessの設定内容2(リンク元による制御)
特定のリンク先からのアクセスを弾く事ができます。
この弾きたいURLもアクセスログから取ります。
例えば、リンクして欲しくないサイトから勝手にリンクされていた場合。ここからのリンクを辿ってきたアクセスを弾きたいときは、
SetEnvIf REFERER "http://aaa.xxx.com/link/" Lilith
order allow,deny
allow from all
deny from env=Lilith
と、設定します。http://aaa.xxx.com/link/ がそこから入ってきて欲しくないサイトのページです。
まぁメールで「リンクはずして」と伝えればそれまでですが、言っても聞いてくれない人や連絡が取れない場合はこの手段が有効です。この内容の.htaccessファイルを作成して、自分のサイトの一番上のディレクトリに置いておきます。
*インターネットの世界では基本的に「リンクの許可・不許可」の強制力はないと思って下さい。
逆に、特定のサイトからのリンクのみ許可する場合は、
SetEnvIf REFERER "http://mydomain.com/" Lilith
order deny,allow
deny from all
allow from env=Lilith
と設定します。
例えばこの設定を書いた.htaccessファイルを自分の掲示板CGIのディレクトリに置いておけば、掲示板は"http://mydomain.com/"にあるリンクから辿ってきた場合のみ入ることができます。
制限REFERERを増やすには次のとおりに行います。
SetEnvIf REFERER "http://mydomain.com/" Lilith
SetEnvIf REFERER "http://mydomain.com/bbs/top.html" Lilith2
order deny,allow
deny from all
allow from env=Lilith
allow from env=Lilith2
試してみるとわかると思いますが、全てのリンクに対して制限を加えるので、そのページの中で利用してる画像ファイルのリンク元(つまりimgタグの書いてあるHTMLファイル)も全て書く必要があります。フレームの場合も少々やっかいです。
*ちなみに個人のブックマーク(ブラウザから)も「ここにしろ!」という強制はできません。
5.メンバー専用ページを作る
パスワードを使ったBasic認証によるアクセス制限を行います。
どこかのサイトにアクセスした時に、こんなポップアップを見たことないでしょうか?

これは、ウェブサーバの認証機能を使っています。
このユーザ名とパスワードのところに決められた名前とパスの組み合わせを書かなければページを見ることができません。
この機能を使うためには、まず各サーバで『.htpasswdが利用可』かどうか調べます。可能であれば使えます。
用意するファイルは2つ。.htaccessファイルと.htpasswdファイルです。
この2つを、制限をかけたいディレクトリにおきます。
DocumentRoot/
index.html
member/ ←この下から制限をかけたい
.htaccess
.htpasswd
index.html
すると、そこのディレクトリ以降にあるファイルにアクセスがあると上のポップアップが上がってユーザ名とパスワードを確認します。認証がNGならば入れません。
さっそく2つのファイルを作ってみましょう。
とりえあず.htaccessファイルにこんなのを書いておきます。
AuthUserFile /home/user/xxx/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter username and password"
AuthType Basic
require valid-user
<Limit GET POST>
require user name2,name3
</Limit>
説明します。
一行目。ここで指定したファイルに、許可したいユーザ名とパスワードの組み合わせが書いてあります。作り方は後で。
問題はこのファイルを置く場所です。このファイルはサーバ上のフルパス指定(“/”ではじまる指定方法)なので、個人で領域を借りている場合はわからないことがあります。おそらく各サーバで.htaccessが置ける場合はここの場所が指定されているはずなのでそれを探して下さい。
または、.htpasswdファイルを置きたいディレクトリに次のCGIを適当な名前で作って、サーバ上に置いて実行してみましょう。
perlの場合dirname.cgiとして
#!/usr/local/bin/perl
my $a = `pwd`;
print <<"EOM";
Content-type: text/html
$a
EOM
exit;
一行目はサーバのperlのパスにあわせてください。次のPHPのほうが楽チンです。
PHPの場合dirname.phpとして
<?php
echo dirname(__FILE__);
?>
実行結果がこのディレクトリのフルパス名です。
二行目。ユーザをグループ分けして認証をかけることができます。が、今回は省略。/dev/nullとしておいて下さい。
三行目。認証ポップアップの所に出るタイトル。適当につけましょう。あとはそのまま書いて下さい。
最後に許可したいユーザ名をrequire userの後に書きます。
複数あるときは“,”で区切ります。
次に.htpasswdファイルを作ります。これは.htaccessのrequire userの後に書いた許可したいユーザ名とパスワードの組み合わせを暗号化して書いておくファイルです。
許可したいユーザ名とパスワードが決まりましたら、メモ帳で.htpasswdを作って追加していきます。
(.htaccessファイルと同じくOSやエディタによっては“.”で始まる名前のファイルを作れない場合があるので、サーバ上にアップしたあと名前を変えます)
.htpasswdファイルの中身はこんな感じです。
name2:bYRhIqXzSCE5Q
name3:De8ncJnznpAZ2
ユーザ名:パスワード(暗号化)を1行ずつ書きます。間にあるのは半角のセミコロン“:”です。ユーザ名、パスワードともに全角文字は使えません。
ユーザ名はそのままですが、問題は暗号化したパスワードです。どのように作り出すかと言うと、それぞれのサーバのサポートページで用意してあると思います。
暗号化したいパスワード文字列を平文で入力し、そこから暗号化文字を作り出す仕組みになっているはずです。私が借りているサーバではこんなページが用意されています。

作り出されたパスワード文字列を自分で作った.htpasswdファイルにコピーします。
自分の借りてるサーバに限らず、パスワード作り出してくれるサービスをしてくれるサイトがいくつかあります。
Googleで「htpasswd 作成」といれるといくつか出てきます。たいていは他のサーバで作ったものでも使えるはずです。

ちなみにサーバに直接TELNETで入れたり、Windows版で作りたい時はコマンドプロンプトから次の作業を行います。
>htpasswd -c .htpasswd name1
htpasswdはWebサーバのbinディレクトリの下にあります。最初にファイルを作る時は-cオプションをつけて、続けてパスワードファイル名を指定します。その次に作り出したいユーザ名を指定します。 すると、パスワードを聞いてくるので確認も含めて2度入力します。
>htpasswd .htpasswd name2
ユーザを増やす時は、-cオプションをつけずに同じ作業をします。
暗号の方式が違うと別のサーバ上では使えませんが、今は大体どこも同じで使えるはずです。
もしもこのような制限のあるページを作りたい場合、ユーザ名とパスワードを自分で決めてアクセスを許可する人に配布するか、最初に相手にユーザ名とパスワードを決めてもらって、それを元に.htaccessと.htpasswdファイルを作るかどちらかです。
作り出した2つのファイルをサーバ上にアップして試してみましょう。
おまけ .htaccessファイルの他の利用方法
○SSIの拡張子設定および使用
今時大抵のサーバでは使えるようになっているのですが、まれに自分で設定してくれ・・・という場合があります。そもそも今はあまりSSI自体使うことが少ないのですが、とりあえず説明します。
Options +Includes
AddType text/html .shtml
AddHandler server-parsed .shtml
このOptionsで始まる設定ですが、サーバによっては許可されていません。
htaccessファイルの内容は、多少書き方が違いますがサーバの動きを決める大元となる設定ファイル(httpd.conf、ウェブサーバ起動時に読み込む)にも同じように書けます。
そっちで指定している場合、各ディレクトリでの.htaccessのOptionsの上書きを許さないようになっているサーバがあります。ご注意下さい。
ちなみに、
AddHandler server-parsed .html
このように設定すると拡張子がhtmlのファイルもSSIとして使えます。が、無駄な作業なのでなるべくやらないようにしましょう。
○.htaccessファイルが見えてしまったら
つまり、URLのファイル名を削ってディレクトリの中身を見ようとすると、全て見えてしまう場合です。最近のウェブサーバでは仕様により普通は見えないはずですが、見えるところもまれにあります。大抵index.htmlファイルを置く事により回避できるのですが、スッキリしない人のために.htaccessファイルを使って設定しておきます。
.htaccessの中身は次のとおりです。
Options -Indexes
これだけ書いた.htaccessファイルを自分の領域のTOPディレクトリ置いておけば、そこから下全てでファイルの一覧が見えなくなります。
他にも.htaccessファイルでできることは結構あります。自分でやりたいことが出てきたら検索で方法を探ってください。