risou's Lithograph

ひとつのドメインでプロトコルによって本番環境/テスト環境を切り替える手法はありか

2019-11-27

先日、上記のツイートでアンケートをとった。
実は勤め先の社内でも「これってどうなんですかね」と大半が Web/App エンジニアで構成されている Slack 上のチャネルで質問をした。
ちなみにそのチャネルでは回答率約50%で、全員が「なし」だった。

そもそもなぜこのような問いかけをしたかというと、発端は以下のツイートである。

このツイートを見たとき、「どうしてそんな下手な嘘をつくんだろう」と思った。
嘘だと思ったのは、ひとつのドメインを https と http でそれぞれ本番環境、テスト環境につながるようにしておく、というやり方は明らかに良くない手法だ、と考えたからだ。
そして、このツイートの裏には「本当は隠しておきたい別の事柄があるのではないか」と考えたのだ。

しかし、軽く調べてみると、どうやら本当にそのような設定をしていたタイミングがあったようで、 Google にはテスト環境と思われるページのキャッシュが残っている。
(見た目でテスト環境と容易に判断できるものではなかったが、ページのタイトルが明らかに本番向けではない文字列だった)

となると嘘と判断したのは僕の早計で、これはもしやハンロンの剃刀なのでは、という可能性が思い浮かんだ。
そしてもうひとつ、そもそも「明らかに良くない手法」という僕の判断自体が間違っている可能性も思い浮かんだ。

そこで最初のツイートをした、というわけだ。

僕の周辺にいる人たちの大半はこの手法を良いとは思っていないようだ。

僕自身、改めて自分がなぜ良くないと判断したのかを整理しておく。

想定する状況は以下の通り。

  1. あるドメイン(ここでは example.com とする)を所有している
  2. https://example.com にアクセスしたら、本番環境につながるように設定する
  3. http://example.com にアクセスしたら、 SSL にリダイレクトする
  4. テスト環境で動作を確認したい時のみ、 http://example.com にアクセスしたら、テスト環境につながるように設定する

僕がこのやり方は良くない、と考えるのは以下の点だ。

  • アクセスするタイミングによって http://example.com にアクセスしたときの接続先が異なる
    • 状況を知らない閲覧者に混乱を招く
  • テスト環境に public にアクセスできる
    • テスト環境には社内ネットワークからのみアクセスできるのが望ましい
  • テスト環境が検索エンジンにキャッシュされる
    • noindex なり robots.txt なりでキャッシュされないようにしておく必要がある
      • テスト環境のみ設定が必要になるので noindex などでは本番とコードを同一にできないデメリットがある
      • robots.txt で回避するのが良さそう
      • (ちなみに、これを記載しているのは実際にテスト環境と思われるページのキャッシュが Google に残っているため)
    • そもそもこれも社内ネットワークからしかアクセスできないようにしておけば解決する

ではどうするのが良いか、というと以下のような方法が考えられる。

  • テスト環境用に別ドメインを用意する
  • テスト環境へのアクセスを制限する

当然、これらの方法を取れないケースもある。
たとえば別途ドメインを取得する予算がなかったり、社外の関係者にテスト環境を見てもらうために不特定の IP から接続できる必要があったり。

リスクや回避方法を理解した上で仕方なくこのような手法をとっているのか、何も考えずにやっているのかで内部の状況は大きく異なるように思える。
一方で外からはその違いはわからないし、少々の制約があろうがこれは回避した方が良いリスクだと僕は思う。

とはいえ、僕の考えが正しいという確信を持っているわけでもない。
(やや誇張した表現ではあるが)最初のツイートにあるように、僕はこのあたりの専門家ではない。
個人的には専門家の意見を聞いてみたいが、専門家に問題ないと言われても、僕自身は選択の余地があればリスクを回避と思う。

2019-11-27T23:36:43.594014+09:00