【问题标题】:Cross-plone-site URLs give weird combination跨克隆站点 URL 给出了奇怪的组合
【发布时间】:2011-11-16 03:42:42
【问题描述】:

我有两个克隆站点由同一个克隆设置提供服务,每个站点都由两个不同的域名访问,它们指向相同的 IP 地址。 apache 前端具有虚拟主机和 mod_proxy 设置,以将 URL 定位到适当的 plone 站点。总结:

DNS:
  mysite1.com -> my machine's IP address
  mysite2.com ->      ditto

Plone:
    2 Plone sites: site1, site2

Apache:
    2 virtual hosts defined:
      ProxyPass / http://localhost:8080/VirtualHostBase/http/mysite1.com:80/site1/VirtualHostRoot/
      ProxyPassReverse / http://localhost:8080/VirtualHostBase/http/mysite1.com:80/site1/VirtualHostRoot/

    and

      ProxyPass / http://localhost:8080/VirtualHostBase/http/mysite2.com:80/site2/VirtualHostRoot/
      ProxyPassReverse / http://localhost:8080/VirtualHostBase/http/mysite2.com:80/site2/VirtualHostRoot/

这允许 URL mysite1.com 转到 plone “site1”,而 mysite2.com 转到 plone “site2”。

所有这些都有效。

但是,如果我在浏览器中访问:mysite1.com/site2,那么我会从每个站点获取 site2 的内容以及主题的一些元素。同样,如果我访问 mysite2.com/site1,我会从这两个网站获得混合的内容和主题。

我知道这些 URL 在任何地方都不可见 - 只是我在输入它们 - 我只是担心这种串扰确实会发生,因此对于我在每个站点中拥有的不同安全域有什么影响?

【问题讨论】:

    标签: plone


    【解决方案1】:

    你正在经历的被称为Acquisition;属性继承自对象的容器而不是其类层次结构。

    您不必担心这会从您的站点中移除安全控制。在 site1 或 site2 中定义的用户不会获得访问所获取站点的额外权限,并且只能通过这种方式访问​​匿名(公共)信息和方法。

    如果您使用在顶层定义的用户访问任一站点(因此包含两个站点的根 Zope 对象),那么您可以访问任一站点上的受保护信息,无论是否获得。

    串扰的唯一风险是,如果您的网站依赖于能够访问与其他网站对象具有相同 id 的皮肤方法或对象,并且该皮肤方法或对象已消失(例如,已删除) .然后,您的代码最终可能会访问获取的站点对象,结果无法预测,因为获取的站点显然与您的代码所期望的不同。对于皮肤方法等,安全性不允许您造成任何伤害。浏览器视图和其他 python 级代码当然最终会造成伤害,但这应该是一种非常罕见的情况组合。如果您的网站没有可能与您的网站内容发生冲突的 ID,则无需担心这一点。

    【讨论】:

    • 感谢 Martijn 的解释。我认为这是我不会放松太多睡眠的事情。 :-)
    【解决方案2】:

    这是Acquisition 的祝福/诅咒。 Here 是一个解决方案。

    【讨论】:

    • 请注意,这并不容易;您必须定义一个 new 顶级对象来改变采集行为,无论如何都不是胆小的人。
    • 有人可能会争辩说,如果你不尝试,你就不会失败:)。无论如何,我之前已经遇到过这种奇怪的行为,恕我直言,这是我们应该以一种或另一种方式解决的问题。正如你所说,这并不是很危险,但是当一个新人发现这一点时,他首先想到的是他发现了一个巨大而危险的错误(就像我当时所做的那样)
    • 这是 Zope 社区正在修复的问题,但对于 Zope 现在来说,它是一项基础技术,需要一段时间这样做。 :-)
    • 谢谢大家的见解。我不认为我会急于实现一个新的顶级站点对象 - 我可能会破坏太多东西,特别是如果 Zope 会在某个时候改进它。
    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多