diff options
author | Lukas Reschke <lukas@statuscode.ch> | 2012-10-31 18:37:59 +0100 |
---|---|---|
committer | Lukas Reschke <lukas@statuscode.ch> | 2012-10-31 18:37:59 +0100 |
commit | 7a7f12a0c126522cb067de692af0950d46bf15fc (patch) | |
tree | 1364f5ec500ead1ac29adde4cc72e5174a7a29ed /core | |
parent | ac784baef689ca5c0f22c8acdce8e13f6d918101 (diff) | |
download | nextcloud-server-7a7f12a0c126522cb067de692af0950d46bf15fc.tar.gz nextcloud-server-7a7f12a0c126522cb067de692af0950d46bf15fc.zip |
Create only one CSRF token per session
Before, the CSRF token expired every hour. We had a script in place
which should refresh the token but this don't worked in every case.
(Laptop sleeping etc.)
With this commit, the token will only get once created for every
session so that the "Token expired" warning shouldn't appear.
Diffstat (limited to 'core')
-rw-r--r-- | core/ajax/requesttoken.php | 40 | ||||
-rw-r--r-- | core/js/requesttoken.js | 55 | ||||
-rw-r--r-- | core/routes.php | 3 | ||||
-rw-r--r-- | core/templates/layout.base.php | 1 | ||||
-rw-r--r-- | core/templates/layout.guest.php | 1 | ||||
-rw-r--r-- | core/templates/layout.user.php | 8 |
6 files changed, 7 insertions, 101 deletions
diff --git a/core/ajax/requesttoken.php b/core/ajax/requesttoken.php deleted file mode 100644 index 9d43a722852..00000000000 --- a/core/ajax/requesttoken.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php -/** -* ownCloud -* @author Christian Reiner -* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info> -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE -* License as published by the Free Software Foundation; either -* version 3 of the license, or any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU AFFERO GENERAL PUBLIC LICENSE for more details. -* -* You should have received a copy of the GNU Affero General Public -* License along with this library. -* If not, see <http://www.gnu.org/licenses/>. -* -*/ - -/** - * @file core/ajax/requesttoken.php - * @brief Ajax method to retrieve a fresh request protection token for ajax calls - * @return json: success/error state indicator including a fresh request token - * @author Christian Reiner - */ - -// don't load apps or filesystem for this task -$RUNTIME_NOAPPS = true; -$RUNTIME_NOSETUPFS = true; - -// Sanity checks -// using OCP\JSON::callCheck() below protects the token refreshing itself. -//OCP\JSON::callCheck ( ); -OCP\JSON::checkLoggedIn ( ); -// hand out a fresh token -OCP\JSON::success ( array ( 'token' => OCP\Util::callRegister() ) ); -?> diff --git a/core/js/requesttoken.js b/core/js/requesttoken.js deleted file mode 100644 index 0d78cd7e93b..00000000000 --- a/core/js/requesttoken.js +++ /dev/null @@ -1,55 +0,0 @@ -/** - * ownCloud - * - * @file core/js/requesttoken.js - * @brief Routine to refresh the Request protection request token periodically - * @author Christian Reiner (arkascha) - * @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the license, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. - * If not, see <http://www.gnu.org/licenses/>. - * - */ - -OC.Request = { - // the request token - Token: {}, - // the lifespan span (in secs) - Lifespan: {}, - // method to refresh the local request token periodically - Refresh: function(){ - // just a client side console log to preserve efficiency - console.log("refreshing request token (lifebeat)"); - var dfd=new $.Deferred(); - $.ajax({ - type: 'POST', - url: OC.filePath('core','ajax','requesttoken.php'), - cache: false, - data: { }, - dataType: 'json' - }).done(function(response){ - // store refreshed token inside this class - OC.Request.Token=response.token; - dfd.resolve(); - }).fail(dfd.reject); - return dfd; - } -} -// accept requesttoken and lifespan into the OC namespace -OC.Request.Token = oc_requesttoken; -OC.Request.Lifespan = oc_requestlifespan; -// refresh the request token periodically shortly before it becomes invalid on the server side -setInterval(OC.Request.Refresh,Math.floor(1000*OC.Request.Lifespan*0.93)), // 93% of lifespan value, close to when the token expires -// early bind token as additional ajax argument for every single request -$(document).bind('ajaxSend', function(elm, xhr, s){xhr.setRequestHeader('requesttoken', OC.Request.Token);}); diff --git a/core/routes.php b/core/routes.php index cc0aa53a21e..6f999356689 100644 --- a/core/routes.php +++ b/core/routes.php @@ -13,9 +13,6 @@ $this->create('search_ajax_search', '/search/ajax/search.php') // AppConfig $this->create('core_ajax_appconfig', '/core/ajax/appconfig.php') ->actionInclude('core/ajax/appconfig.php'); -// RequestToken -$this->create('core_ajax_requesttoken', '/core/ajax/requesttoken.php') - ->actionInclude('core/ajax/requesttoken.php'); // Share $this->create('core_ajax_share', '/core/ajax/share.php') ->actionInclude('core/ajax/share.php'); diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php index f78b6ff8bbd..d8f83058775 100644 --- a/core/templates/layout.base.php +++ b/core/templates/layout.base.php @@ -11,7 +11,6 @@ var oc_webroot = '<?php echo OC::$WEBROOT; ?>'; var oc_appswebroots = <?php echo $_['apps_paths'] ?>; var oc_requesttoken = '<?php echo $_['requesttoken']; ?>'; - var oc_requestlifespan = '<?php echo $_['requestlifespan']; ?>'; </script> <?php foreach ($_['jsfiles'] as $jsfile): ?> <script type="text/javascript" src="<?php echo $jsfile; ?>"></script> diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php index e6468cdcfb4..2eaa517b324 100644 --- a/core/templates/layout.guest.php +++ b/core/templates/layout.guest.php @@ -11,7 +11,6 @@ var oc_webroot = '<?php echo OC::$WEBROOT; ?>'; var oc_appswebroots = <?php echo $_['apps_paths'] ?>; var oc_requesttoken = '<?php echo $_['requesttoken']; ?>'; - var oc_requestlifespan = '<?php echo $_['requestlifespan']; ?>'; var datepickerFormatDate = <?php echo json_encode($l->l('jsdate', 'jsdate')) ?>; var dayNames = <?php echo json_encode(array((string)$l->t('Sunday'), (string)$l->t('Monday'), (string)$l->t('Tuesday'), (string)$l->t('Wednesday'), (string)$l->t('Thursday'), (string)$l->t('Friday'), (string)$l->t('Saturday'))) ?>; var monthNames = <?php echo json_encode(array((string)$l->t('January'), (string)$l->t('February'), (string)$l->t('March'), (string)$l->t('April'), (string)$l->t('May'), (string)$l->t('June'), (string)$l->t('July'), (string)$l->t('August'), (string)$l->t('September'), (string)$l->t('October'), (string)$l->t('November'), (string)$l->t('December'))) ?>; diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index d876fbc98e8..451a4685e82 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -12,7 +12,6 @@ var oc_appswebroots = <?php echo $_['apps_paths'] ?>; var oc_current_user = '<?php echo OC_User::getUser() ?>'; var oc_requesttoken = '<?php echo $_['requesttoken']; ?>'; - var oc_requestlifespan = '<?php echo $_['requestlifespan']; ?>'; var datepickerFormatDate = <?php echo json_encode($l->l('jsdate', 'jsdate')) ?>; var dayNames = <?php echo json_encode(array((string)$l->t('Sunday'), (string)$l->t('Monday'), (string)$l->t('Tuesday'), (string)$l->t('Wednesday'), (string)$l->t('Thursday'), (string)$l->t('Friday'), (string)$l->t('Saturday'))) ?>; var monthNames = <?php echo json_encode(array((string)$l->t('January'), (string)$l->t('February'), (string)$l->t('March'), (string)$l->t('April'), (string)$l->t('May'), (string)$l->t('June'), (string)$l->t('July'), (string)$l->t('August'), (string)$l->t('September'), (string)$l->t('October'), (string)$l->t('November'), (string)$l->t('December'))) ?>; @@ -21,6 +20,13 @@ <?php foreach($_['jsfiles'] as $jsfile): ?> <script type="text/javascript" src="<?php echo $jsfile; ?>"></script> <?php endforeach; ?> + <script type="text/javascript"> + requesttoken = '<?php echo $_['requesttoken']; ?>'; + OC.EventSource.requesttoken=requesttoken; + $(document).bind('ajaxSend', function(elm, xhr, s) { + xhr.setRequestHeader('requesttoken', requesttoken); + }); + </script> <?php foreach($_['headers'] as $header): ?> <?php echo '<'.$header['tag'].' '; |