跨plone站点URL提供了奇怪的组合

时间:2011-11-15 15:57:26

标签: plone

我有两个plone站点由相同的plone设置提供,每个站点由两个不同的域名访问,这两个域名指向相同的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,那么我会从两个网站中混合使用内容和主题。

我知道这些网址在任何地方都看不到 - 只是我输入它们 - 我只是担心这种串扰确实发生了,因此我在每个网站中对不同的安全域有什么影响?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您遇到的问题称为Acquisition;从对象的包含而不是从它的类层次结构继承的属性。

您无需担心这会从您的网站中删除安全限制。在site1或site2中定义的用户无法获得访问所获取站点的其他权限,只能通过这种方式访问​​匿名(公共)信息和方法。

如果您访问具有在顶级定义的用户的任一站点(因此包含两个站点的根Zope对象),那么您可以访问任一站点上的受保护信息,获取与否。 / p>

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