diff --git a/airtime_mvc/application/modules/rest/controllers/MediaController.php b/airtime_mvc/application/modules/rest/controllers/MediaController.php index f03b3b7b2..dbbc346ba 100644 --- a/airtime_mvc/application/modules/rest/controllers/MediaController.php +++ b/airtime_mvc/application/modules/rest/controllers/MediaController.php @@ -300,12 +300,18 @@ class Rest_MediaController extends Zend_Rest_Controller } return $id; } - + private function verifyAuth($checkApiKey, $checkSession) { - //Session takes precedence over API key for now: - if ($checkSession && $this->verifySession()) - { + // Session takes precedence over API key for now: + if ($checkSession && $this->verifySession()) { + // CSRF token validation only applies to session based authorization. + if(!$this->verifyCSRFToken($this->_getParam('csrf_token'))){ + $resp = $this->getResponse(); + $resp->setHttpResponseCode(401); + $resp->appendBody("ERROR: Token Missmatch."); + return false; + } return true; } @@ -321,6 +327,17 @@ class Rest_MediaController extends Zend_Rest_Controller return false; } + private function verifyCSRFToken($token){ + $current_namespace = new Zend_Session_Namespace('csrf_namespace'); + $observed_csrf_token = $token; + $expected_csrf_token = $current_namespace->authtoken; + + if($observed_csrf_token == $expected_csrf_token){ + return true; + }else{ + return false; + } + } private function verifyAPIKey() { diff --git a/airtime_mvc/public/js/airtime/library/plupload.js b/airtime_mvc/public/js/airtime/library/plupload.js index a361fe442..f96ee3157 100644 --- a/airtime_mvc/public/js/airtime/library/plupload.js +++ b/airtime_mvc/public/js/airtime/library/plupload.js @@ -89,7 +89,7 @@ $(document).ready(function() { $.ajax({ type: 'DELETE', - url: '/rest/media/' + file.id, + url: 'rest/media/' + file.id + "?csrf_token=" + $("#csrf").attr('value'), success: function(resp) { self.recentUploadsTable.fnDraw(); },