nmtysh.log

Tech系のネタや日々の独り言などを書いています。

アクセスさせたくないページのレスポンスコードは何が最適なのだろうか

Webサイトでセキュリティ対策の一環として一般ユーザーや特定IP帯以外からのアクセスは遮断したい領域がありますよね。
そのようなページにアクセスされた際にどのレスポンスコードを返すのが良いのか悩んだので考えてみました。

403 Forbidden

アクセスを禁止したい場合に一番よく目にするのがこの Forbidden ですね。
閲覧者に権限が無く、リクエストを拒否されたという意味ですが、つまり指定したリソースは 存在している ということですよね。
「指定されたリソースはあるけど、アクセスさせないよ」ということなので、あるということを教えちゃっているとも解釈できます。

404 Not Found

「そんなもの無いよ!」と帰ってきた場合、本当に無いというパターンもありえるのでレスポンスコードだけではそのリソースが存在しているのか判断が難しいです。
Wikipediaを見ると「単に、アクセス権がない場合などにも使用される。」ともありますね。

410 Gone

消滅した。明示的に恒久的になくなったことを伝える場合に返却されます(します)。
検索エンジンなどでは404と同等に扱われることもあります。
404との違いは、410だと「以前は存在していた」ということぐらいでしょうか。

まとめ

単純にアクセス権が無いとだけ返すのであれば403が妥当ですが、存在そのものも教えたくない場合は404を返すのが良さそうです。
もっとも、対象リソースの存在を隠せたとしても、露出している部分からサイト構造を推測されると*1あまり意味はないのかもしれませんが……

関連

*1:例えばWordPressとか。管理画面のwp-adminなどを404で隠したとしても、200を返しているページのレスポンスヘッダーやmetaタグ内にWordPressだとわかる情報が混じっていれば、そのサイトで使われているのがWordPressだとバレバレですよね。