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许可。
贡献者
Maurits van Rees,邮箱:m.van.rees@zestsoftware.nl
变更日志
1.0.0b2 (2019-09-17)
修复了PyPI描述。[maurits]
1.0.0b1 (2019-09-17)
首次发布。[maurits]
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分发
collective.denyroles-1.0.0b2.tar.gz的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 57d7f87a5781fdc77eda3666d77e38052042d629913061da2e8bda799af5da9e |
|
| MD5 | df8da2705638b77d50ca0230f1869d88 |
|
| BLAKE2b-256 | 9f24550c2d1de9551ac149218b69671c78df9f31018fa435107937f8e4b1522c |