Metadata-Version: 1.0
Name: plone.protect
Version: 2.0
Summary: Security for browser forms
Home-page: http://pypi.python.org/pypi/plone.protect
Author: Plone Foundation
Author-email: plone-developers@lists.sourceforge.net
License: BSD
Description: Introduction
        ============
        
        This package contains utilities that can help to protect parts of Plone
        or applications build on top of the Plone framework.
        
        
        protect decorator
        =================
        
        The most common way to use plone.protect is through the ``protect``
        decorator. This decorator takes a list of *checkers* as parameters: each
        checker will check a specific security aspect of the request. For example::
        
          from plone.protect import protect
          from plone.protect import PostOnly
        
          @protect(PostOnly)
          def SensitiveMethod(self, REQUEST=None):
              # This is only allowed with HTTP POST requests.
        
        This relies on the protected method having a parameter called REQUEST.
        
        HTTP POST
        =========
        
        If you only need to allow HTTP POST requests you can use the *PostOnly*
        checker::
        
          from plone.protect import PostOnly
          from plone.protect import protect
        
          @protect(PostOnly)
          def manage_doSomething(self, param, REQUEST=None):
              pass
        
        This checker only operators on HTTP requests; other types of requests
        are not checked.
        
        
        Form authentication
        ===================
        
        A common problem in web applications is Cross Site Request Forgery or CSRF.
        This is an attack method in which an attacker tricks a browser to do a HTTP
        form submit to another site. To do this the attacker needs to know the exact
        form parameters. Form authentication is a method to make it impossible for an
        attacker to predict those parameters by adding an extra authenticator which
        can be verified.
        
        To use the form authenticator you first need to insert it into your form.
        This can be done using a simple TAL statement inside your form::
        
          <span tal:replace="structure context/@@authenticator/authenticator"/>
        
        this will produce a HTML input element with the authentication information.
        Next you need to add logic somewhere to verify the authenticator. This
        can be done using a call to the authenticator view. For example::
        
           authenticator=getMultiAdapter((context, request), name=u"authenticator")
           if not authenticator.verify():
               raise Unauthorized
        
        You can do the same thing more conveniently using the ``protect`` decorator::
        
          from plone.protect import CheckAuthenticator
          from plone.protect import protect
        
          @protect(CheckAuthenticator)
          def manage_doSomething(self, param, REQUEST=None):
              pass
        
        
        
        
        Changelog
        =========
        
        2.0 - 2010-07-18
        ----------------
        
        - Update license to BSD following board decision.
          http://lists.plone.org/pipermail/membership/2009-August/001038.html
          [elro]
        
        2.0a1 - 2009-11-14
        ------------------
        
        - Removed deprecated AuthenticateForm class and zope.deprecation dependency.
          [hannosch]
        
        - Avoid deprecation warning for the sha module in Python 2.6.
          [hannosch]
        
        - Specify package dependencies
          [hannosch]
        
        1.1 - 2008-06-02
        ----------------
        
        - Add an optional GenericSetup profile to make it easier to install
          plone.protect.
          [mj]
        
        1.0 - 2008-04-19
        ----------------
        
        - The protect decorator had a serious design flaw which broke it. Added
          proper tests for it and fixed the problems.
          [wichert]
        
        1.0rc1 - 2008-03-28
        -------------------
        
        - Rename plone.app.protect to plone.protect: there is nothing Plone-specific
          about the functionality in this package and it really should be used outside
          of Plone as well.
          [wichert]
        
        - Made utils.protect work with Zope >= 2.11.
          [stefan]
        
        1.0b1 - March 7, 2008
        ---------------------
        
        - Refactor the code to offer a generic protect decorator for methods
          which takes a list of checkers as options. Add checkers for both the
          authenticator verification and HTTP POST-only.
          [wichert]
        
        1.0a1 - January 27, 2008
        ------------------------
        
        - Initial release
          [wichert]
        
Keywords: zope security CSRF
Platform: UNKNOWN
Classifier: Environment :: Web Environment
Classifier: Framework :: Plone
Classifier: Framework :: Zope2
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
