【サーバー】.htaccessによる障害!!…超便利だけど超危険?(初心者向け)

.htaccessによる障害!!...超便利だけど超危険?(初心者向け)

私は現在の会社に就職して、先輩社員からその人が昔やっていた仕事とか一緒に仕事した人の特徴とかやってしまったミスとかを聞くのが好きなのです。
その中で.htaccessに関する話を聞くことができました。

例えば、BASIC認証ってあるじゃないですか?
WEBページにアクセスしたらアカウント名とパスワードを聞かれるやつです。

.htaccessというファイルをサーバー上におくとBASIC認証がかけられます。

他にも、リダイレクトの設定特定のIPアドレスのみアクセスを許可するといったような便利なことがいろいろできるのですが、本当に一筋縄では行きません。
ほんのちょっとでも下手なことをするとWEBページが一切表示されなくなります

今回の記事では.htaccessでどんなことができるのか、何が危険なのか、普段からの対策として何ができるかを私なりにまとめてみました。

注意
この記事で書かれていることを鵜呑みにしてはいけません。あくまでも参考程度に留めておいてください。初心者に向けに、.htaccessは便利だけど恐ろしいものだということを伝えたいのです。この記事に書かれていることを実践されて障害が発生しても私は一切責任は持てません。ご承知ください。

.htaccessでどんなことができるのか?

.htaccessはapache(アパッチ)と呼ばれるソフトフェアが動く環境で使うことができます。
そして、このファイルが置かれたディレクトリに作用します。

BASIC認証をかけられる

.htaccessによってBASIC認証をかけることができます。
WEBページにアクセスするとアカウントとパスワードが求められ、認証を通すとページを閲覧できるというものです。

例えば、作成したWEBページの本番環境での動作確認をしたい場合に使えます。

まだ修正するかもしれないページを本番環境にのせてしまったら、ネット上に公開されてしまいます。
だから、自分しか知らないアカウントとパスワードを作ってBASIC認証をかければ、他の誰かが閲覧できない状態で本番環境での動作確認が可能になります。

BASIC認証の設定はネット上でたくさん公開されているので参考にしましょう。

リダイレクト

特定のURLにアクセスすると、勝手に別のURLへジャンプさせることができます。

例えば、過去に作成した古いページを削除した場合です。
削除したと言ってもそのページのURLでブックマークしているユーザーが多くいると想定されるなら、削除したページのURLを新しいページのURLへジャンプ(リダイレクト)させればユーザーも困惑しないでしょう。

他にも、http://でアクセスしてきたユーザーをhttps://にリダイレクトさせることはよくあります。

特定のIPアドレスのみアクセス可能

これもBASIC認証に近い効果があります。
.htaccessに記述したIPアドレスとWEBページにアクセスしてきたユーザーのIPアドレスとマッチすればページを閲覧できるというものです。

BASIC認証ならアカウントとパスワードを他人に教えれば誰でも閲覧できるのですが、BASIC認証ではなくIPアドレスを指定すればより強いセキュリティとなります。

.htaccessの何が恐いのか?

自分でWEBページを運営している場合やWEBエンジニアであれば.htaccessを触る機会はあると思いますが、冒頭で言った通りほんのちょっとでも記述を間違えるととんでもないことになります。

BASIC認証の何が恐い?

BASIC認証をかけたいファイル(ここではindex,htmlとします)が置かれているディレクトリ内に、すでに公開されているファイルが置かれているとします。
そんなときに以下のようなコードを.htaccessに書くとどうなるでしょうか?

このコードの「require valid-user」に注目してください。
これがあることでBASIC認証を聞かれるようになるのですが、この記述だとindex.html以外の全ファイルにBASIC認証をかけてしまいます

index.html以外のファイルはすでに公開されているのに、それにBASIC認証をかける必要はありません。
いままで閲覧できていたユーザーが突然BASIC認証を求められて、認証のためのアカウントとパスワードを知らないので閲覧が不可能になります。

あくまでもindex.htmlだけにBASIC認証をかけたければ、ディレクティブと呼ばれる領域に「require valid-user」を書く必要があります。

ここでのディレクティブはif文のようなもので、「<Files index.html>」から「</Files>」がそれです。

「require valid-user」がなければBASIC認証は聞かれないので、1行目の「AuthName」の上から「<Files index.html>」で囲ってもよいです。

.htaccessの文法を間違えるとどうなる?

もし.htaccessの文法にミスが1個でもある場合、.htaccessが置かれたディレクトリ内のすべてのページは閲覧が不可能になります。

サーバーのエラーということで、大抵は500エラーがブラウザに表示されます。

ここでやっかいなのは、どこでエラーが起きているのかを示してくれないということです。
つまり、デバッグができないのです。

ただ「500エラーです。サーバーが何か悪さをしています」というような文章が表示されるだけなので、.htaccessのどこにミスがあるのか?いや、そもそも.htaccessが悪いのか?というようなことを追求しなければなりません。

そして、問題が解消されるまでは自分だけでなく全てのユーザーがページを閲覧できなくなっていることもお忘れなく…。

.htaccessが置かれているディレクトリに注意

.htaccessはサーバー上のどのディレクトリにおいても効きます。
そして、.htaccessが置かれているディレクトリ内のファイルのみに効きます。

例えば、CSSや画像やJavaScriptなどのファイルをHTMLファイルとは別のディレクトリ(ここではそのディレクトリ名をassetsとします)に置いておくとします。
そして、HTMLが置かれているディレクトリには.htaccessがなく、assetsディレクトリに.htaccessが置かれているとします。

そして、assetsディレクトリ内の.htaccessにBASIC認証をかけていたとしてWEBページを見るとどうなるでしょうか?

HTMLファイルにはBASIC認証をかけておらずassetsディレクトリ内のファイルにBASIC認証をかけているのだから、ページを表示するとHTMLは画面に表示されるけどCSSやJavaScriptは効いていないし画像も表示されません。

そして、BASIC認証を突破するとそれらが効くことになります。

.htaccessをどこに置いて、そのディレクトリ内のファイルにどんな設定をしたいのかを確認しましょう。

お客さんのサイトが見れなくなったらどうなるの?

500エラーによりWEBページが見れなくなった場合、それがお客さんのWEBページだったら大変なことになります。

広く一般に自分の存在を知ってもらおうとか、WEBページを通じて集客しようと思っているからWEBページを作るのに、それが見れないというのはわけがわからない状況です。

例えば、Googleの検索エンジンでは広告料を払えば特定のキーワード検索によって検索順位のトップに表示してくれる仕組みがあります。
しかし、広告料を払っているのに一般ユーザーはサイトを閲覧できないとなると損害賠償に発展する可能性があるのは明らかです。
訴訟までいかないとしても大きな信用を失います

.htaccessの失敗による500エラーだけでなく、間違ったBASIC認証やリダイレクトをかけて、とにかく一般ユーザーがサイトを閲覧できないという状況は絶対にあってはならないことです。
しかも、それがお客さんから指摘されて気づいたとなれば赤面ものです。

.htaccessのミスを防ぐ方法の例

私は非常にこの.htaccessを恐ろしく思っているので、普段からいくつか対策をしています。
.htaccessだけでなく本番環境に接続する際の注意とも見れます。

  1. エディターやWEB上のftpアップロード機能は使わない。
  2. 本番環境にアップロードする際は、編集したファイルのみにする。
  3. .htaccessを本番環境に適用する前は有識者にレビューをいただく。
  4. FileZillaのようなftpクライアントでの操作ではマウスではなくキーボードを使う。
  5. .htaccessの編集ではエディターを使わない。
  6. .htaccessに関するネット上のコードをコピペしない。
  7. .htaccessをアップロードしたら、ただちに障害の有無を確認する。
1番目に関しては、信用できるftpクライアントソフトを使わないと、本番環境にアップロードしたらパーミッションが変わっている場合があります
レンタルサーバーであれば.htaccessにかけるパーミッションがサーバー会社ごとに異なる場合があります。
適切なパーミッションをかけないと、やっぱり500エラーになります。

2番目に関しては、編集していないファイルだからといってアップロードで上書きされても問題ないとしては危険です。
1番のようにパーミッションの問題があります。
面倒臭がらずに編集したファイルのみをアップロードしています。

3番に関しては、これはもう当然のことだと思います。
絶対に自分が書いたコードを信用しません。
.htaccessに関してはそれくらい慎重になりたいということです。

4番目に関しては、マウスのうっかりクリックの防止のためです。
私の経験としてはマウスよりもキーボードで操作したほうがミスは少ないと思います。

5番目に関しては、BOMという概念があり、.htaccessに必要な文字コードが存在します。
エディターで編集して保存すると、エディターで設定されている文字コードで上書きされます。
だから.htaccessだけはメモ帳で編集します。

6番目に関しては、これもBOM対策という見方もあるのですが、使用しているサーバーによっては.htaccessの文法が若干ことなることがあるからです。

7番目に関して、これも当然といえば当然です。
仮に500エラーになっても早急に対処できて、被害を最小限に留めることができるからです。

まとめ

.htaccessの便利さと恐ろしさはネット上でもたくさん言われていることですが、私は2年前の自分のブログで2回やらかしました。

.htaccess内でダブルクォーテーションが必要な場所でつけておらず500エラーになったのが1回目です。
再び画面が真っ白になったときに.htaccessとにらめっこしてたら、実はWordPressのfunctions.php内のPHPの文法ミスだとわかったことが2回目です。

.htaccessを触るのは必要最低限にとどめましょう。