【问题标题】:Is there a way to know if an user owns a domain?有没有办法知道用户是否拥有域?
【发布时间】:2020-11-20 13:45:24
【问题描述】:

我正在开发一个 webapp(Django),让用户只需点击几下就可以拥有一个 eshop。我为https://shopname.mydomain.es 下的商店提供服务,但如果他们愿意,我会为他们提供使用域的选项。

例如,我的一个用户 (user1) 在他选择的域提供商中购买了“happyuser.com”。然后我告诉他们修改他们的 DNS 以指向我的服务器。到目前为止一切顺利,一切正常,我使用 Nginx 允许从连接的域进行访问,一切正常。

我的疑惑来了。我使用中间件来检测主机,在本例中为“happyuser.com”,我检查了一个表,其中包含用户和域名之间的关系。

class UserDomain(models.Model):
   user = ForeingKey(...)
   domain = UrlField(...)

然后我告诉 Django 为正确的商店提供服务。但是如果另一个用户(user2)也保存了域“happyuser.com”,我怎么知道我应该加载哪个用户商店?我知道这种情况不太可能发生,但是有没有办法防止这个问题发生?

【问题讨论】:

    标签: django dns request middleware


    【解决方案1】:

    在正式将域与该用户帐户关联之前,您需要对域进行某种形式的激活过程。例如:

    • 要求用户在 DNS TXT 记录中存储特定值(为该用户随机生成),或设置特定的随机 CNAME 子域(例如 ijiqjwv87123rbbv8123.happyuser.com)指向您的域。然后查询该 DNS 记录,看看它是否符合预期。
    • 要求用户根据需要设置 DNS 记录以指向您的服务器,然后向该自定义域和特定路径(例如 happyuser.com/check)发出 HTTP 请求,并期望从您自己的服务器接收一些特定令牌.

    这两种方式都证明用户故意配置了域,他们显然可以控制,根据你只给他们的说明,证明他们必须是所有意图和目的的域的所有者。

    【讨论】:

      【解决方案2】:

      我认为你是对的,这是一个不太可能发生的问题。花很多时间在上面没有什么意义。确保包含客户域的表在该列上具有唯一索引,阻止问题表单的发生并花费一些时间来实施。

      【讨论】:

      • 在我去劫持您的域以阻止您注册它们的时候拿着我的啤酒......在实践中会出现多少问题确实很大程度上取决于您的服务有多受欢迎,但实际上,这是一个相对容易的问题,可以在实际用户开始体验之前完全阻止它。
      • 你能扩展一下吗?我不确定您要如何实现这一目标……在系统中注册数千个域?这很容易发现,简单的验证码主要会阻止它......每个帐户的域限制也可以解决这个问题。从技术上讲,dns 记录是一个更好的选择,但它也需要更多的时间和最终用户的专业知识来实施。这似乎是一个新项目,正如他们在初创企业中所说:“不要优化得太快”,获得市场份额比优化未使用的产品更好。
      猜你喜欢
      • 2010-10-31
      • 2014-11-13
      • 1970-01-01
      • 2013-08-22
      • 2023-03-18
      • 1970-01-01
      • 2014-09-11
      • 2010-10-27
      • 2019-11-17
      相关资源
      最近更新 更多