Plone 跨平台站点URL提供了奇怪的组合

Plone 跨平台站点URL提供了奇怪的组合,plone,Plone,我有两个plone站点由同一个plone设置提供服务,每个站点由两个指向同一IP地址的不同域名访问。apache前端具有虚拟主机和mod_代理,用于将URL定位到适当的plone站点。总之: DNS: mysite1.com -> my machine's IP address mysite2.com -> ditto Plone: 2 Plone sites: site1, site2 Apache: 2 virtual hosts defin

我有两个plone站点由同一个plone设置提供服务,每个站点由两个指向同一IP地址的不同域名访问。apache前端具有虚拟主机和mod_代理,用于将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在任何地方都看不到——只是我输入了它们——我只是担心这种串扰会发生,因此,我在每个站点中拥有的不同安全域有什么含义?

这是我的祝福/诅咒。”这是一个解决办法。

这就是上帝的祝福/诅咒。”这是一个解决方案。

你所经历的被称为;从对象的包含而不是从其类层次结构继承的属性

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

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


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

您所经历的被称为;从对象的包含而不是从其类层次结构继承的属性

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

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


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

请注意,这并不容易;你必须定义一个新的顶级对象来改变获取行为,而不是在任何情况下为心脏虚弱的人定义。有人可能会说,如果你不尝试,你就不会失败:)。不管怎样,我以前已经面对过这种奇怪的行为,我想这是我们应该解决的问题,不管怎样。正如你所说,这并不真正危险,但当一个新来者发现这一点时,他首先想到的是他发现了一个巨大而危险的bug(就像我当时所做的那样),这是Zope社区正在修复的东西,但它是Zope现在的基础技术,需要一段时间才能完成。:-)谢谢你们的见解。我不认为我会匆匆忙忙地去实现一个新的顶级站点对象——我可能会破坏太多的东西,特别是如果这是Zope在某个时候可以改进的东西;你必须定义一个新的顶级对象来改变获取行为,而不是在任何情况下为心脏虚弱的人定义。有人可能会说,如果你不尝试,你就不会失败:)。不管怎样,我以前已经面对过这种奇怪的行为,我想这是我们应该解决的问题,不管怎样。正如你所说,这并不真正危险,但当一个新来者发现这一点时,他首先想到的是他发现了一个巨大而危险的bug(就像我当时所做的那样),这是Zope社区正在修复的东西,但它是Zope现在的基础技术,需要一段时间才能完成。:-)谢谢你们的见解。我不认为我会匆匆忙忙地去实现一个新的顶级站点对象——我可能会破坏太多的东西,特别是如果这是Zope在某个时候会改进的东西的话。谢谢Martijn的解释。我想这是我不会睡太多的东西。:-)谢谢你的解释,Martijn。我想这是我不会睡太多的东西。:-)