跳转到主要内容

一种绕过Plone安全性的机制,如果知道秘密令牌,则可以执行通常未经授权的操作(核心包)

项目描述

简介

为Plone开发者提供的一个产品。您将能够在站点的受保护内容上注册操作,这些内容受一个秘密令牌的保护。

使用内部实用程序或调用提供的视图(@@consume-powertoken),您可以运行您之前配置的操作。

如何使用

首先,你需要这个实用工具

>>> from collective.powertoken.core.interfaces import IPowerTokenUtility
>>> utility = getUtility(IPowerTokenUtility)

有了这个,你可以在网站内容(例如,文档)上注册新的动作

>>> token = utility.enablePowerToken(document, 'myMagicAction')

令牌必须(可能)保密,你必须按你的偏好使用它(例如:开发一个通过电子邮件发送令牌的应用程序)

然后你可以使用相同的工具执行给定的动作

>>> result = utility.consumeActions(document, token)

或者调用需要令牌路径参数的提供视图,例如

http://myplonesite/@@consume-powertoken?token=aaaa-bbbb-cccc&path=path/to/the/content

consumeActions也可以使用额外的运行时参数调用,这些参数可以在执行动作时使用

>>> result = utility.consumeActions(document, token, runtime_parameter1='foo', runtime_parameter2=5.4)

注册多个操作

你也可以为令牌注册(然后运行所有)多个动作。

>>> token = utility.enablePowerToken(document, 'myMagicAction')
>>> utility.addAction(document, token, 'myMagicAction')
>>> utility.addAction(document, token, 'aDifferentAction')

当你消费令牌时,所有注册的动作将按顺序执行。

>>> result = utility.consumeActions(document, token)

执行什么操作?

这只是一个核心包,因此你需要寻找其他添加可能的动作的包(或者开发你自己的包)。

当你调用时

>>> token = utility.enablePowerToken(document, 'myMagicAction', parameter1='foo', parameter2=5)

…你正在准备调用名为myMagicAction的适配器,同时也保存了提供的额外配置参数(在下面的特殊动作对象中,见下文)。请注意,第三方适配器可能需要特定的配置参数才能正常工作。

当调用consumeActions时,内部会搜索新的适配器

>>> from collective.powertoken.core.interfaces import IPowerActionProvider
>>> adapter = getMultiAdapter((document, request),
...                           IPowerActionProvider,
...                           name='myMagicAction')
>>> result = adapter.doAction(action, runtime_parameter1='foo', runtime_parameter2=5.4)

如何处理结果(你也可以不提供结果)由你控制。结果始终是一个包含所有执行动作结果的Python列表。

所有已知的动作提供者列表可在网上获得(请自由贡献并更新此页)。

特殊参数

当调用enablePowerToken并给出额外参数时,它们将存储在动作对象中

角色

默认为空列表。通常当你调用consumeActions时,你是在执行一个保持用户特权的动作。提供该列表中的Zope角色将给你这些角色。这样,知道令牌,你通常可以执行未经授权的动作。

oneTime

默认为True。当你调用consumeActions时,你通常执行动作并将动作从动作列表中删除。相反,你可以配置一个在执行时永远不会使令牌过期的动作,这样你就可以多次调用它(每次使用相同的令牌)。

params

默认为空字典,自动填充其他所有关键字参数,通常由适配器使用。

额外的先进参数

unrestricted

默认:False。使用不受限制的用户,该用户始终通过安全检查。请注意,你通常不需要这个,只需很好地配置角色

username

默认:None。当使用不同的安全上下文,如使用角色参数时,而不是当前用户的id(或匿名时为空字符串)你可以选择一个新的。

最终安全提示

该产品与Zope安全交互,可能给用户带来巨大的权力,只需知道秘密令牌。

小心!

作者

该产品由RedTurtle技术团队开发。

RedTurtle Technology Site

变更日志

0.3.0 (2012-02-15)

  • 现在你可以消费动作时添加运行时参数[keul]

  • 更新文档并修复错误[keul]

0.2.0 (2012-01-15)

  • 添加新选项:unrestricted(你通常不需要这个,真的)[keul]

  • 添加新选项:username[keul]

0.1.0 (2012-01-11)

  • 初始发布

由以下支持