假设我有一个域名test.com,当用户在我的网站注册一个账号后,假设用户名为tom,那么默认给他分配一个专属的地址https://tom.test.com,如果用户有一个自己备案的域名tom.com,他把blog.tom.com做一个cname解析到tom.test.com,这样他访问自己的域名就是这样的
blog.tom.com->tom.test.com->服务器ip->程序
请问我的程序获取到主机名(域名)是什么?
我怎么判断他的域名备案了,在哪里查询,需要非常稳定的接口。
去哪里查询用户做了cname记录了。
如何防止乱cname?
blog.tom.com
,注意cname只是DNS解析级别的处理,并不是301/302/307/308这样的跳转用户的地址,所以程序看到的和地址栏一致,就是blog.tom.com
任何一个DNS解析工具都可以发现,比如
dig
,nslookup
,host
命令,如果你期望编程实现,那么各大编程语言提供的DNS API接口都可以解析域名,比如java自带的InetAddress
就有解析域名的功能: https://developer.aliyun.com/...由于CNAME不会影响浏览器的地址栏,因此只要通过
host
头做白名单判断即可,比如nginx中基于域名的虚拟主机就相当容易实现这一点: