【问题标题】:Pros/cons of subdomains in web applicationsWeb 应用程序中子域的优缺点
【发布时间】:2011-01-18 09:19:00
【问题描述】:

越来越多的网络应用程序(尤其是 37Signals 的 Basecamp)为每个用户/帐户分配一个子域。我想知道这种方法的优缺点是什么。这样做有什么特别的原因吗,或者这仅仅是一个装饰功能?例如,这是否允许更好/更轻松的可扩展性和更高的安全性?

【问题讨论】:

标签: web-applications


【解决方案1】:

我认为这可能与同源政策有关。如果两个用户的成员页面位于不同的子域中,浏览器将阻止来自一个子域的脚本访问另一个子域中的文档。因此,如果 Mallory 注册了一个站点 (mallory.example.org) 并在其上放置了恶意脚本,那么该脚本将无法修改 Alice 站点 (alice.example.org) 的 DOM。如果他们改用路径(example.org/mallory 和 example.org/alice),则 SOP 将不起作用,Mallory 的脚本可能会在 Alice 的页面上做各种坏事,比如伪造登录屏幕并发布密码回到马洛里。

这种 SOP 保护甚至在两个子域解析到同一个 IP 时也有效 - 只要 URL 的主机部分不同,现代浏览器就会阻止跨域脚本尝试(以及一些其他潜在危险的事情)。

【讨论】:

  • 感谢您的意见。换句话说,您认为它具有一定的安全优势。
【解决方案2】:

为每个应用程序使用一个子域可以解决知道要使用哪个应用程序的基本问题。这允许用户在同一个浏览器中同时打开多个应用程序。

另一个好处是,通过将登录名绑定到子域,用户可以在不同的应用程序中以不同的用户身份登录。无需退出应用 A 即可登录应用 B。他可以使用不同的登录名登录两者。

可扩展性的好处取决于您的架构。应用程序拥有的共享资源(单个数据库)越多,分离应用程序的难度就越大。另一方面,如果每个应用程序都有一个数据库,那么数据库的版本控制就麻烦多了。我认为大多数应用程序使用单个数据库和虚拟子域。单一基地更容易维护(但更难扩展)。

使用子域的不利之处在于,对于 SSL,您需要一个通配符证书,其成本高于单域证书。

【讨论】:

  • 感谢 Stefaan 的回复。我认为您误读了我的问题(或者我不够清楚),但我正在考虑为不同的用户使用子域,而不是不同的应用程序。无论如何,您的大部分推理在任何情况下都适用。了解您提到的有关 SSL 证书的内容也很有趣。我不知道。
【解决方案3】:

我们这样做的唯一原因是人们喜欢看到他们的品牌。 Conversion Support 客户可以为其控制面板的品牌选择一个子域,然后使用他们的徽标和颜色对其进行自定义。

安全不是一个因素,因为没有人可以提供脚本。这更像是一种美学特征。

我想提一下,如果两个页面都将 document.domain JavaScript 属性设置为域,则两个子域可以通信。例如:

 document.domain = 'example.com';  

这意味着只要所有子域都设置了该属性,a.example.com 和 b.example.com 到 n.example.com 的同源策略就会被禁用。

【讨论】:

  • 感谢您的回复。如果它只是一个装饰性的功能,使用 mod_rewrite 给用户一个单独的子域的印象不是更容易吗?
  • @bare_nature - 如果你使用 Apache,我想你可以。但是假设您使用的是 Jetty? Jetty 确实有一个重写引擎,但它嵌入在应用程序级别,用于 301 重定向。在我的例子中,Spring 过滤器或拦截器完美地完成了这项工作,并允许我们基于子域以编程方式执行不同的操作。另外,重写涉及更多的处理并且没有业务逻辑。另外,它们不是动态的,您必须对它们进行硬编码。如果 *.example.com 立即解析到您的应用程序,您的应用程序会快多少? a.example.com,b.example.com,没有额外的处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 2012-06-19
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多