跳转到主要内容

Plone PAS补丁,用于拒绝编辑器和管理员访问

项目描述

collective.denyroles

这是一个针对PAS(可插拔认证服务)的猴子补丁。它拒绝具有管理员或编辑器等角色用户的对Plone站点的访问。

特性

  • 为PAS的_authorizeUser方法提供的补丁,它会检查用户的角色,并在发现某些角色时拒绝授权。

  • 通过环境变量或请求头来配置,以查看是否应该执行检查。

用例

您有两个域名上的Plone站点

  • edit.example.local用于编辑。具有编辑器或管理员角色的用户在此登录以编辑和管理站点。这是一个只能在本地网络或VPN内访问的本地域名。

  • www.example.org用于匿名用户,也许也用于没有额外角色的标准成员。该域名由一个特殊的防火墙保护,以防止常见的网络攻击,如可疑的表单提交、请求洪水、垃圾邮件发送者、跨站脚本攻击等。

问题

  • 编辑器有时会登录到公共域名,并在编辑时出现错误,因为防火墙过于保护。

  • 系统管理员抱怨,他已经设置了一个专门用于编辑和管理的域名,以便无法从公共站点传入更改,但编辑者意外地可以通过公共站点进行登录并做出更改。

此软件包为您提供选项以阻止具有一些全局角色的用户访问(公共)站点。更准确地说:他们将被视为匿名用户。当他们尝试登录时,登录过程将失败。

安装

通过将其添加到您的buildout中安装collective.denyroles

[buildout]

...

eggs =
    collective.denyroles

然后运行 bin/buildout。它立即生效,无需在Plone站点内激活。

您可能需要在您的buildout配置中进行一些更多配置。请参阅下一节。

配置

不允许访问的角色可以在 src/collective/denyroles/config.py 中查看。我们可能会在某个时候使其可配置。目前它们是

  • 管理员

  • 站点管理员

  • 编辑器

  • 审稿人

  • 贡献者

有两种方法可以配置是否应该检查角色:通过环境变量或通过请求头。

环境变量

您可以设置一个环境变量以始终拒绝角色

export DENY_ROLES=1

将其设置为1(或另一个正整数)表示是,0表示否。其他任何值都将被忽略。

请注意,当您手动启动Plone实例或在cron作业中启动它时,操作系统环境可能不同。因此,最好在您的Plone buildout.cfg 中设置此变量

[instance]
recipe = plone.recipe.zope2instance
environment-vars =
    DENY_ROLES 1

运行buildout,它将在Plone配置中设置,在这种情况下在 parts/instance/etc/zope.conf 中。

环境变量在有多个zeoclients的ZEO设置中很有用,其中一个zeoclients接收来自编辑器的所有流量,另一个接收匿名访客的流量。您可以这样做

  • 编辑器的zeoclient: DENY_ROLES 0

  • 匿名访客的zeoclient: DENY_ROLES 1

现在编辑器可以在他们的编辑环境中正常编辑。并且当他们在匿名环境中意外登录时,他们将被视为匿名。

请求头

当环境变量未设置或设置无效值时,我们检查请求头。我们有两个头,以解决黑客试图插入头的问题

X_DO_CHECK_ROLES
X_DONT_CHECK_ROLES

当环境变量未设置且没有头时,默认情况是拒绝角色。所以

  • 当这些头中没有设置时,我们拒绝编辑器的访问。

  • X_DO_CHECK_ROLES 设置时,我们拒绝编辑器的访问。

  • X_DONT_CHECK_ROLES 设置时,我们允许所有角色的访问。

  • 当这两个头都设置时,X_DO_CHECK_ROLES 获胜,我们拒绝编辑器的访问。

请求头的方法在您有一个单个zeoclient处理两个不同域的所有流量时很有用。然后,Web服务器(如nginx或Apache)应根据流量来自哪个域名添加头

  • 对于编辑域名: X_DONT_CHECK_ROLES

  • 对于公共领域,可选择使用:X_DO_CHECK_ROLES。这样做是为了明确起见。同时,当你不确定黑客是否能够插入其他头文件时,这也有帮助。

值并不重要,只要存在具有此名称的请求头即可,但1似乎是一个不错的选择。

建议的构建配置使用方法

这是关于如何在构建中正确添加此功能的建议。请注意,这主要关注配置collective.denyroles,而忽略了其他许多有用的设置。

[zeoclient]
# Configuration for public zeoclient.
recipe = plone.recipe.zope2instance
http-address = 8080
zeo-client = on
eggs =
    Plone
    collective.denyroles
# Environment variables shared by all zeoclients:
base-environment-vars =
    zope_i18n_compile_mo_files true
environment-vars =
    ${:base-environment-vars}
# In the public zeoclient, we deny access to editors/managers:
    DENY_ROLES 1

[zeoclient-cms]
# Second Plone zeoclient, only used for CMS, so for editors.
# The next weird line means: inherit all settings from the [zeoclient] section:
<= zeoclient
# Use a different port:
http-address = 8090
environment-vars =
    ${:base-environment-vars}
# In the CMS zeoclient, we do not want to deny access to editors/managers:
    DENY_ROLES 0

[instance]
# Standalone Plone instance without ZEO setup, for local development.
<= zeoclient
zeo-client = off
environment-vars =
    ${:base-environment-vars}
# With single instance, we do not want to deny access to editors/managers:
    DENY_ROLES 0

支持

如果您遇到问题,请告知我们。请联系Zest Software的Maurits van Rees,邮箱:m.van.rees@zestsoftware.nl。或者,在GitHub上创建一个问题。

许可证

该项目采用GPLv2许可。

贡献者

变更日志

1.0.0b2 (2019-09-17)

  • 修复了PyPI描述。[maurits]

1.0.0b1 (2019-09-17)

  • 首次发布。[maurits]

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分发

collective.denyroles-1.0.0b2.tar.gz (17.4 kB 查看哈希值)

上传时间:

支持者