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 |