X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fsession.php;h=2cb755ab3aa81bdef7f0c281825dba4abdf73cf2;hb=269154e29e93e01807a8f20ce08a0dec698b53c9;hp=07f6fab3331e029cf9be579bc20435fe97929e4b;hpb=08fa70684fd1332178cddb6b318151335fb4506c;p=platal.git diff --git a/classes/session.php b/classes/session.php index 07f6fab..2cb755a 100644 --- a/classes/session.php +++ b/classes/session.php @@ -27,6 +27,10 @@ class Session if (empty($_SESSION['challenge'])) { $_SESSION['challenge'] = sha1(uniqid(rand(), true)); } + if (empty($_SESSION['xsrf_token'])) { + require_once 'xorg.misc.inc.php'; + $_SESSION['xsrf_token'] = rand_url_id(); + } if (!isset($_SESSION['perms']) || !($_SESSION['perms'] instanceof FlagSet)) { $_SESSION['perms'] = new FlagSet(); } @@ -83,6 +87,22 @@ class Session { return Session::v('auth', AUTH_PUBLIC) >= AUTH_MDP; } + + // Anti-XSRF protections. + public static function has_xsrf_token() + { + return Session::has('xsrf_token') && Session::v('xsrf_token') == Env::v('token'); + } + + public static function assert_xsrf_token() + { + if (!Session::has_xsrf_token()) { + global $page; + if ($page instanceof PlatalPage) { + $page->kill("L'opération n'a pas pu aboutir, merci de réessayer."); + } + } + } } // {{{ function check_perms()