From 8484ce22584b8714622833adcc7ebfe3ef9cf90e Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 26 Dec 2011 12:02:52 +0400 Subject: [PATCH] experimental CSRF protection --- backend.php | 28 +++++++++++++++++++++------- classes/article.php | 6 ++++++ classes/feeds.php | 6 ++++++ classes/handler.php | 4 ++++ classes/pref_feeds.php | 7 +++++++ classes/pref_filters.php | 6 ++++++ classes/pref_instances.php | 6 ++++++ classes/pref_labels.php | 6 ++++++ classes/pref_prefs.php | 6 ++++++ classes/pref_users.php | 7 ++++++- classes/rpc.php | 6 ++++++ include/functions.php | 7 +++++++ js/functions.js | 19 +++++++++++++++++++ js/tt-rss.js | 1 - 14 files changed, 106 insertions(+), 9 deletions(-) diff --git a/backend.php b/backend.php index 1805ce36..2e4da500 100644 --- a/backend.php +++ b/backend.php @@ -1,5 +1,5 @@ before($method)) { - if ($method && method_exists($handler, $method)) { - $handler->$method(); - } else if (method_exists($handler, 'index')) { - $handler->index(); + if (validate_csrf($csrf_token) || $handler->csrf_ignore($method)) { + if ($handler->before($method)) { + if ($method && method_exists($handler, $method)) { + $handler->$method(); + } + $handler->after(); + return; } - $handler->after(); + } else { + header("Content-Type: text/plain"); + print json_encode(array("error" => array("code" => 6))); return; } } diff --git a/classes/article.php b/classes/article.php index 90ca129b..30f0c7d1 100644 --- a/classes/article.php +++ b/classes/article.php @@ -1,6 +1,12 @@ args = $args; } + function csrf_ignore($method) { + return true; + } + function before() { return true; } diff --git a/classes/pref_feeds.php b/classes/pref_feeds.php index 5df5eb93..b83abd78 100644 --- a/classes/pref_feeds.php +++ b/classes/pref_feeds.php @@ -1,5 +1,12 @@ "; diff --git a/classes/pref_filters.php b/classes/pref_filters.php index d953a8d1..4ab12410 100644 --- a/classes/pref_filters.php +++ b/classes/pref_filters.php @@ -1,6 +1,12 @@