一种绕过plone安全机制,在知道秘密令牌的情况下执行通常未经授权的操作(核心包)
collective.powertoken.core的Python项目详细描述
目录
Introduction
为plone开发人员提供的产品。您将能够在站点内容上注册受保护的操作 通过秘密令牌。
使用内部实用程序或调用提供的视图(@@consume-powertoken),可以运行 以前配置过。
How to use
首先,您需要实用程序:
>>> from collective.powertoken.core.interfaces import IPowerTokenUtility >>> utility = getUtility(IPowerTokenUtility)
使用此功能,您可以在网站内容(例如,文档)上注册新操作:
>>> token = utility.enablePowerToken(document, 'myMagicAction')
token必须(可能)保密,并且您必须根据自己的喜好使用它(例如:开发 通过电子邮件发送令牌的应用程序)
然后,您可以使用相同的实用程序执行给定的操作:
>>> result = utility.consumeActions(document, token)
或者调用所提供的需要token和path参数的视图,例如:
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)
Registering more that one action
您还可以为令牌注册(然后运行所有主题)多个该操作。
>>> token = utility.enablePowerToken(document, 'myMagicAction') >>> utility.addAction(document, token, 'myMagicAction') >>> utility.addAction(document, token, 'aDifferentAction')
当您使用令牌时,所有注册的操作都将按顺序执行。
>>> result = utility.consumeActions(document, token)
What action is executed?
这只是核心包,所以您需要寻找添加可能操作(或开发)的其他包 你自己的)。
当您拨打电话时:
>>> token = utility.enablePowerToken(document, 'myMagicAction', parameter1='foo', parameter2=5)
…您正在为名为mymagicaction的适配器准备调用,同时还节省了额外的 提供配置参数(在特殊的action对象中,请参见下文)。 要知道,第三方适配器可能需要特定的配置参数才能正常工作。
调用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列表,包含所有已执行操作的所有结果。
一个list of all know action providers可以在线获得(随时贡献和更新此页面 你自己的)。
Special parameters
当调用enablePowerToken并提供其他参数时,它们存储在action 对象:
- roles
- 默认为空列表。通常,当您调用consumeActions时,执行的操作将保留用户的 特权。提供一个zope角色列表将为您提供那些角色。就这样, 知道令牌后,通常可以执行未经授权的操作。
- oneTime
- 默认为true。当您调用consumeActions时,通常会执行该操作并删除该操作 从行动列表中。 相反,您可以配置一个在执行时不会使令牌过期的操作,这样您可以调用它许多 您需要的时间(每次使用相同的令牌)。
- params
- 默认值是空的dict,自动填充传递的每个其他关键字参数, 适配器常用。
附加高级,参数:
- unrestricted
- defaut:错误。使用不受限制的用户,该用户始终通过安全检查。请注意 您通常不需要这个,只要配置好roles。
- username
- defaut:无。当使用不同的安全上下文时,比如当使用roles参数时 您可以选择一个新的用户名。
Changelog
0.3.0 (2012-02-15)
- 现在,您可以在使用actions[keul]时添加runtime参数
- 更新文档并从错误中修复[keul]
0.2.0 (2012-01-15)
- 添加了新选项:unrestricted(您通常不需要这个,真的)[keul]
- 添加了新选项:username[keul]