ba4f12baa0
Class Throttler implements the bruteforce protection for security actions in Nextcloud. It is working by logging invalid login attempts to the database and slowing down all login attempts from the same subnet. The max delay is 30 seconds and the starting delay are 200 milliseconds. (after the first failed login)
57 lines
1.8 KiB
PHP
57 lines
1.8 KiB
PHP
<?php
|
|
/**
|
|
* @author Lukas Reschke <lukas@statuscode.ch>
|
|
* @author Roeland Jago Douma <rullzer@owncloud.com>
|
|
* @author Thomas Müller <thomas.mueller@tmit.eu>
|
|
*
|
|
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
|
* @license AGPL-3.0
|
|
*
|
|
* This code is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License, version 3,
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* This program 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, version 3,
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
*
|
|
*/
|
|
|
|
// no php execution timeout for webdav
|
|
set_time_limit(0);
|
|
|
|
// Turn off output buffering to prevent memory problems
|
|
\OC_Util::obEnd();
|
|
|
|
$serverFactory = new \OCA\DAV\Connector\Sabre\ServerFactory(
|
|
\OC::$server->getConfig(),
|
|
\OC::$server->getLogger(),
|
|
\OC::$server->getDatabaseConnection(),
|
|
\OC::$server->getUserSession(),
|
|
\OC::$server->getMountManager(),
|
|
\OC::$server->getTagManager(),
|
|
\OC::$server->getRequest()
|
|
);
|
|
|
|
// Backends
|
|
$authBackend = new \OCA\DAV\Connector\Sabre\Auth(
|
|
\OC::$server->getSession(),
|
|
\OC::$server->getUserSession(),
|
|
\OC::$server->getRequest(),
|
|
\OC::$server->getTwoFactorAuthManager(),
|
|
\OC::$server->getBruteForceThrottler(),
|
|
'principals/'
|
|
);
|
|
$requestUri = \OC::$server->getRequest()->getRequestUri();
|
|
|
|
$server = $serverFactory->createServer($baseuri, $requestUri, $authBackend, function() {
|
|
// use the view for the logged in user
|
|
return \OC\Files\Filesystem::getView();
|
|
});
|
|
|
|
// And off we go!
|
|
$server->exec();
|