[z3-five] Templates in views and path expressions

Martin Aspeli optilude at gmx.net
Mon May 7 17:26:26 CEST 2007


Martin Aspeli wrote:
> Tres Seaver wrote:
> 
>> Does the patch fix your problem?  I refactored the tests for the
>> Expressions module last night to allow up to write tests for the
>> security semantics of both the trusted and the regular engines, but
>> don't want to go further unless the patch fixes you issue.
> 
> It seems to work, yes! Thank you!
> 
> I've tried as a Manager user, and as a user with a local role which has 
> View permission in the context.
> 
> So, I think that fixes the ViewPageTemplateFiles-are-not-real-trusted 
> problem.

... and doesn't break security on untrusted code, either, from what I 
can see.

What scope to we have for getting this fix in, in what time frame? I'm 
hoping we'll be able to have this in a version which Plone 3.0 can 
depend on. ;)

> I still have a problem with security not being applied properly to 
> attributes, though. I just tried to put an untrusted page template in a 
> skin layer (actually, a temporarily mutilated document_view from Plone), 
> and do

I've just tried a few more things, all from untrusted code:

  - Set self.title as an instance variable in the construct, not in the 
class --> still gets Unauthorized

  - Add a method get_title() to the class, with a docstring, returning 
self.title --> accessible

  - Add get_title() to the interface which is used in the <require /> 
statement --> accessible, but strange that it was *before* I added an 
explicit declaration for it

  - Add a new class variable foo = "foo", with no further security 
declarations --> accessible (!)

  - Add a new instance variable self.bar = "bar", with no further 
security delcarations --> accessible (!)

So it seems to me that in general, any attribute which is part of an 
interface protected in a <require /> block, is inaccessible, whilst any 
method protected by an interface with <require /> is handled correctly, 
and any attribute or method not in an interface (i.e. not given explicit 
security declarations) is also accessible.

Martin

> <b tal:content="context/title" />
> 
> on the object. That still gives me the same Unauthorized error as 
> before, even though I thought I'd protected it.
> 
> For reference, here's the ZCML:
> 
>      <class class=".content.Project">
>          <require
>              permission="zope2.View"
>              interface=".interfaces.IProject"
>              />
>          <require
>              permission="cmf.ModifyPortalContent"
>              set_schema=".interfaces.IProject"
>              />
>      </class>
> 
> and the interface:
> 
> class IProject(Interface):
>      """A project workspace, where special local roles may apply
>      """
> 
>      title = schema.TextLine(title=_(u"Title"),
>                              description=_(u"Name of the project"),
>                              required=True)
> 
>      ...
> 
> and the class:
> 
> class Project(Container):
>      implements(IProject, ITTWLockable, INameFromTitle)
>      portal_type = "b-org Project"
> 
>      title = u""
> 
>      ...
> 
> and the error:
> 
> Traceback (innermost last):
>    Module ZPublisher.Publish, line 119, in publish
>    Module ZPublisher.mapply, line 88, in mapply
>    Module Products.PDBDebugMode.pdbzope.runcall, line 60, in pdb_runcall
>    Module ZPublisher.Publish, line 42, in call_object
>    Module Shared.DC.Scripts.Bindings, line 313, in __call__
>    Module Shared.DC.Scripts.Bindings, line 350, in _bindAndExec
>    Module Products.CMFCore.FSPageTemplate, line 220, in _exec
>    Module Products.CMFCore.FSPageTemplate, line 159, in pt_render
>    Module Products.PageTemplates.PageTemplate, line 89, in pt_render
>    Module zope.pagetemplate.pagetemplate, line 117, in pt_render
>    Module zope.tal.talinterpreter, line 271, in __call__
>    Module zope.tal.talinterpreter, line 346, in interpret
>    ...
>    Module Products.PageTemplates.Expressions, line 224, in evaluateText
>    Module zope.tales.tales, line 696, in evaluate
>     - URL: 
> file:/Users/optilude/Development/Plone/Code/Build/ploneout/trunk/products/CMFPlone/skins/plone_content/document_view.pt
>     - Line 12, Column 4
>     - Expression: <PathExpr standard:u'context/managers'>
>     - Names:
>        {'container': <PloneSite at /test>,
>         'context': <Project at /test/my-workspace>,
>         'default': <object object at 0x53528>,
>         'here': <Project at /test/my-workspace>,
>         'loop': {},
>         'nothing': None,
>         'options': {'args': ()},
>         'repeat': <Products.PageTemplates.Expressions.SafeMapping object 
> at 0x8253558>,
>         'request': <HTTPRequest, 
> URL=http://localhost:8080/test/my-workspace/document_view>,
>         'root': <Application at >,
>         'template': <FSPageTemplate at /test/document_view used for 
> /test/my-workspace>,
>         'traverse_subpath': [],
>         'user': <PropertiedUser 'admin'>}
>    Module zope.tales.expressions, line 217, in __call__
>    Module Products.PageTemplates.Expressions, line 153, in _eval
>    Module zope.tales.expressions, line 124, in _eval
>    Module Products.PageTemplates.Expressions, line 80, in 
> boboAwareZopeTraverse
>    Module OFS.Traversable, line 301, in restrictedTraverse
>    Module OFS.Traversable, line 236, in unrestrictedTraverse
>     - __traceback_info__: ([], 'managers')
>    Module AccessControl.ImplPython, line 563, in validate
>    Module AccessControl.ImplPython, line 454, in validate
>    Module AccessControl.ImplPython, line 808, in raiseVerbose
> Unauthorized: Your user account is defined outside the context of the 
> object being accessed.  Access to 'managers' of (Project at 
> /test/my-workspace) denied. Your user account, admin, exists at 
> /acl_users. Access requires one of the following roles: ['Contributor', 
> 'Editor', 'Manager', 'Owner', 'Reader'].
> 
> Martin
> 



More information about the z3-five mailing list