QA@IT

Heroku を利用しているサイトをドメインから判定する方法

2799 PV

http://welove.herokuapp.com を運営しているのですが
Spam登録を防ぐために、ドメインの判定ロジックを組み込んでいます。

現在、以下のようなロジックで判定を行っています。

  • ドメインが、 *.heroku.com , *.herokuapp.com であるか
  • ドメインを正引きした際に、Heroku Dev Center の Custom Domainsに記載されている以下のIP Addressが返ってくるか
    • 75.101.163.44
    • 75.101.145.87
    • 174.129.212.2

ただ、このロジックですと、Herokuで運営されているはずの

などが弾かれてしまいます。

以下のように dig で確認すると

dig qa.atmarkit.co.jp

このような出力がされます。前述のip addressではないので先ほどのロジックでは弾かれてしまいます。

; <<>> DiG 9.7.3-P3 <<>> qa.atmarkit.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 929
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;qa.atmarkit.co.jp.     IN  A

;; ANSWER SECTION:
qa.atmarkit.co.jp.  300 IN  CNAME   qatmarkit.herokuapp.com.
qatmarkit.herokuapp.com. 150    IN  CNAME   ar.herokuapp.com.
ar.herokuapp.com.   68  IN  CNAME   argon-stack-1879049447.us-east-1.elb.amazonaws.com.
argon-stack-1879049447.us-east-1.elb.amazonaws.com. 13 IN A 107.20.177.118
argon-stack-1879049447.us-east-1.elb.amazonaws.com. 13 IN A 107.21.208.103
argon-stack-1879049447.us-east-1.elb.amazonaws.com. 13 IN A 50.19.121.246
argon-stack-1879049447.us-east-1.elb.amazonaws.com. 13 IN A 174.129.244.122
argon-stack-1879049447.us-east-1.elb.amazonaws.com. 13 IN A 23.23.195.213
argon-stack-1879049447.us-east-1.elb.amazonaws.com. 13 IN A 23.21.103.189
argon-stack-1879049447.us-east-1.elb.amazonaws.com. 13 IN A 50.17.250.204
argon-stack-1879049447.us-east-1.elb.amazonaws.com. 13 IN A 50.17.184.83

;; Query time: 20 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Fri Jun 29 12:26:58 2012
;; MSG SIZE  rcvd: 278

例えば、http://kaopression.com のドメインでは dig すると以下のような出力がされます。

dig kaopression.com

この場合、前述のip address と一致するので、先のロジック判定でHerokuのサイトと判定されます。

; <<>> DiG 9.7.3-P3 <<>> kaopression.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4411
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;kaopression.com.       IN  A

;; ANSWER SECTION:
kaopression.com.    300 IN  A   75.101.145.87
kaopression.com.    300 IN  A   75.101.163.44
kaopression.com.    300 IN  A   174.129.212.2

私のDNS周りの理解が乏しいのかと思いますが、
よい解決方法があれば教えていただきたいです。

回答

http://qa.atmarkit.co.jp/ のようにサブドメインを使ったサイトでは、CNAMEによる指定をしていることが多いです。(Heroku的にはそちらのほうが推奨)

上記のdigでは

qa.atmarkit.co.jp.  300 IN  CNAME   qatmarkit.herokuapp.com.

の部分で、*.heroku.com , *.herokuapp.com であるかどうかを見ればいいと思います。

編集 履歴 (0)
  • このロジックで対応出来ました。ありがとうございます。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。