summaryrefslogtreecommitdiff
path: root/docs/narr/sessions.rst
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2016-04-10 20:50:10 -0500
committerMichael Merickel <michael@merickel.org>2016-04-10 22:12:38 -0500
commit6b35eb6ca3b271e2943d37307c925c5733e082d9 (patch)
tree6e959fc6b963a07878409859d54494f8a1d2d017 /docs/narr/sessions.rst
parent9e9fa9ac40bdd79fbce69f94a13d705e40f3d458 (diff)
downloadpyramid-6b35eb6ca3b271e2943d37307c925c5733e082d9.tar.gz
pyramid-6b35eb6ca3b271e2943d37307c925c5733e082d9.tar.bz2
pyramid-6b35eb6ca3b271e2943d37307c925c5733e082d9.zip
rewrite csrf checks to support a global setting to turn it on
- only check csrf on POST - support "pyramid.require_default_csrf" setting - support "require_csrf=True" to fallback to the global setting to determine the token name
Diffstat (limited to 'docs/narr/sessions.rst')
-rw-r--r--docs/narr/sessions.rst42
1 files changed, 40 insertions, 2 deletions
diff --git a/docs/narr/sessions.rst b/docs/narr/sessions.rst
index db554a93b..3baed1cb8 100644
--- a/docs/narr/sessions.rst
+++ b/docs/narr/sessions.rst
@@ -389,8 +389,43 @@ header named ``X-CSRF-Token``.
# ...
-.. index::
- single: session.new_csrf_token
+.. _auto_csrf_checking:
+
+Checking CSRF Tokens Automatically
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. versionadded:: 1.7
+
+:app:`Pyramid` supports automatically checking CSRF tokens on POST requests.
+Any other request may be checked manually. This feature can be turned on
+globally for an application using the ``pyramid.require_default_csrf`` setting.
+
+If the ``pyramid.required_default_csrf`` setting is a :term:`truthy string` or
+``True`` then the default CSRF token parameter will be ``csrf_token``. If a
+different token is desired, it may be passed as the value. Finally, a
+:term:`falsey string` or ``False`` will turn off automatic CSRF checking
+globally on every POST request.
+
+No matter what, CSRF checking may be explicitly enabled or disabled on a
+per-view basis using the ``require_csrf`` view option. This option is of the
+same format as the ``pyramid.require_default_csrf`` setting, accepting strings
+or boolean values.
+
+If ``require_csrf`` is ``True`` but does not explicitly define a token to
+check, then the token name is pulled from whatever was set in the
+``pyramid.require_default_csrf`` setting. Finally, if that setting does not
+explicitly define a token, then ``csrf_token`` is the token required. This token
+name will be required in ``request.params`` which is a combination of the
+query string and a submitted form body.
+
+It is always possible to pass the token in the ``X-CSRF-Token`` header as well.
+There is currently no way to define an alternate name for this header without
+performing CSRF checking manually.
+
+If CSRF checks fail then a :class:`pyramid.exceptions.BadCSRFToken` exception
+will be raised. This exception may be caught and handled by an
+:term:`exception view` but, by default, will result in a ``400 Bad Request``
+resposne being sent to the client.
Checking CSRF Tokens with a View Predicate
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -411,6 +446,9 @@ include ``check_csrf=True`` as a view predicate. See
instead of ``HTTPBadRequest``, so ``check_csrf=True`` behavior is different
from calling :func:`pyramid.session.check_csrf_token`.
+.. index::
+ single: session.new_csrf_token
+
Using the ``session.new_csrf_token`` Method
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~