From 2fe96c5414e00fc2af8df38f379a02166a563a7d Mon Sep 17 00:00:00 2001 From: Vincent Zanotti Date: Fri, 25 Apr 2008 11:01:21 +0200 Subject: [PATCH] Adds basic support for XSRF protection. Signed-off-by: Vincent Zanotti --- classes/session.php | 8 ++++++++ plugins/function.xsrf_token.php | 27 +++++++++++++++++++++++++++ plugins/function.xsrf_token_field.php | 30 ++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 plugins/function.xsrf_token.php create mode 100644 plugins/function.xsrf_token_field.php diff --git a/classes/session.php b/classes/session.php index 07f6fab..a1e72da 100644 --- a/classes/session.php +++ b/classes/session.php @@ -27,6 +27,9 @@ class Session if (empty($_SESSION['challenge'])) { $_SESSION['challenge'] = sha1(uniqid(rand(), true)); } + if (empty($_SESSION['xsrf_token'])) { + $_SESSION['xsrf_token'] = rand_url_id(); + } if (!isset($_SESSION['perms']) || !($_SESSION['perms'] instanceof FlagSet)) { $_SESSION['perms'] = new FlagSet(); } @@ -74,6 +77,11 @@ class Session return Session::logged() && Session::v('perms')->hasFlag(PERMS_ADMIN); } + public static function has_xsrf_token() + { + return Session::has('xsrf_token') && Session::v('xsrf_token') == Env::v('token'); + } + public static function logged() { return Session::v('auth', AUTH_PUBLIC) >= AUTH_COOKIE; diff --git a/plugins/function.xsrf_token.php b/plugins/function.xsrf_token.php new file mode 100644 index 0000000..0258495 --- /dev/null +++ b/plugins/function.xsrf_token.php @@ -0,0 +1,27 @@ + diff --git a/plugins/function.xsrf_token_field.php b/plugins/function.xsrf_token_field.php new file mode 100644 index 0000000..28f09b8 --- /dev/null +++ b/plugins/function.xsrf_token_field.php @@ -0,0 +1,30 @@ +'; + } + return ''; +} + +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: +?> -- 2.1.4