From a9bfb8a7a99551bde68a0d080cda0a31499ac9b6 Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Tue, 14 Apr 2020 08:44:15 +0300 Subject: [PATCH] New origin validator --- app/app.php | 18 +-- app/controllers/api/avatars.php | 2 +- public/images/clients/flutter-android.png | Bin 23275 -> 13563 bytes public/images/clients/flutter-ios.png | Bin 23275 -> 13563 bytes public/images/clients/flutter.png | Bin 23275 -> 13563 bytes src/Appwrite/Network/Validators/Origin.php | 121 +++++++++++++++++++++ 6 files changed, 131 insertions(+), 10 deletions(-) create mode 100644 src/Appwrite/Network/Validators/Origin.php diff --git a/app/app.php b/app/app.php index 613707bb5b..7ab147225b 100644 --- a/app/app.php +++ b/app/app.php @@ -16,6 +16,7 @@ use Appwrite\Database\Database; use Appwrite\Database\Document; use Appwrite\Database\Validator\Authorization; use Appwrite\Event\Event; +use Appwrite\Network\Validators\Origin; /* * Configuration files @@ -96,16 +97,15 @@ $utopia->init(function () use ($utopia, $request, $response, &$user, $project, $ * Adding Appwrite API domains to allow XDOMAIN communication * Skip this check for non-web platforms which are not requiredto send an origin header */ - $origin = parse_url($request->getServer('HTTP_ORIGIN', $request->getServer('HTTP_REFERER', '')), PHP_URL_HOST); - - if (!empty($origin) - && !in_array($origin, $clients) - && in_array($request->getMethod(), [Request::METHOD_POST, Request::METHOD_PUT, Request::METHOD_PATCH, Request::METHOD_DELETE]) - && empty($request->getHeader('X-Appwrite-Key', '')) - ) { - throw new Exception('Access from this client host is forbidden', 403); - } + $origin = $request->getServer('HTTP_ORIGIN', $request->getServer('HTTP_REFERER', '')); + $originValidator = new Origin($project->getAttribute('platforms', [])); + if(!$originValidator->isValid($origin) + && in_array($request->getMethod(), [Request::METHOD_POST, Request::METHOD_PUT, Request::METHOD_PATCH, Request::METHOD_DELETE]) + && empty($request->getHeader('X-Appwrite-Key', ''))) { + throw new Exception($originValidator->getDescription(), 403); + } + /* * ACL Check */ diff --git a/app/controllers/api/avatars.php b/app/controllers/api/avatars.php index 84689814d8..81df073668 100644 --- a/app/controllers/api/avatars.php +++ b/app/controllers/api/avatars.php @@ -356,7 +356,7 @@ $utopia->get('/v1/avatars/qr') ->desc('Get QR Code') ->param('text', '', function () { return new Text(512); }, 'Plain text to be converted to QR code image.') ->param('size', 400, function () { return new Range(0, 1000); }, 'QR code size. Pass an integer between 0 to 1000. Defaults to 400.', true) - ->param('margin', 1, function () { return new Range(0, 10); }, 'Margin From Edge. Pass an integer between 0 to 10. Defaults to 1.', true) + ->param('margin', 1, function () { return new Range(0, 10); }, 'Margin from edge. Pass an integer between 0 to 10. Defaults to 1.', true) ->param('download', 0, function () { return new Range(0, 1); }, 'Return resulting image with \'Content-Disposition: attachment \' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.', true) ->label('scope', 'avatars.read') ->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER]) diff --git a/public/images/clients/flutter-android.png b/public/images/clients/flutter-android.png index be3c163d807bd34e74e27113def1df165397ff1d..f7a3714f75785a3f5beaf2eea7fb62d8aa042022 100644 GIT binary patch literal 13563 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 Ur=}Oo1D#Rr>FVdQ&MBb@0RF8Bn*aa+ diff --git a/public/images/clients/flutter-ios.png b/public/images/clients/flutter-ios.png index be3c163d807bd34e74e27113def1df165397ff1d..f7a3714f75785a3f5beaf2eea7fb62d8aa042022 100644 GIT binary patch literal 13563 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 Ur=}Oo1D#Rr>FVdQ&MBb@0RF8Bn*aa+ diff --git a/public/images/clients/flutter.png b/public/images/clients/flutter.png index be3c163d807bd34e74e27113def1df165397ff1d..f7a3714f75785a3f5beaf2eea7fb62d8aa042022 100644 GIT binary patch literal 13563 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 Ur=}Oo1D#Rr>FVdQ&MBb@0RF8Bn*aa+ diff --git a/src/Appwrite/Network/Validators/Origin.php b/src/Appwrite/Network/Validators/Origin.php new file mode 100644 index 0000000000..b3ba4100cd --- /dev/null +++ b/src/Appwrite/Network/Validators/Origin.php @@ -0,0 +1,121 @@ + 'Web', + self::SCHEME_TYPE_HTTPS => 'Web', + self::SCHEME_TYPE_IOS => 'iOS', + self::SCHEME_TYPE_ANDROID => 'Android', + self::SCHEME_TYPE_MACOS => 'macOS', + self::SCHEME_TYPE_WINDOWS => 'Windows', + self::SCHEME_TYPE_LINUX => 'Linux', + ]; + + /** + * @var array + */ + protected $clients = [ + APP_DOMAIN, + 'localhost', + 'appwrite.test', + ]; + + /** + * @var string + */ + protected $client = self::CLIENT_TYPE_UNKNOWN; + + /** + * @var string + */ + protected $host = ''; + + /** + * @param string $target + */ + public function __construct($platforms) + { + foreach($platforms as $platform) { + $type = (isset($platform['type'])) ? $platform['type'] : ''; + + switch ($type) { + case self::CLIENT_TYPE_WEB: + $this->clients[] = (isset($platform['hostname'])) ? $platform['hostname'] : ''; + break; + + case self::CLIENT_TYPE_FLUTTER_IOS: + case self::CLIENT_TYPE_FLUTTER_ANDROID: + case self::CLIENT_TYPE_FLUTTER_MACOS: + case self::CLIENT_TYPE_FLUTTER_WINDOWS: + case self::CLIENT_TYPE_FLUTTER_LINUX: + $this->clients[] = (isset($platform['key'])) ? $platform['key'] : ''; + break; + + default: + # code... + break; + } + } + } + + public function getDescription() + { + if(!array_key_exists($this->client, $this->platforms)) { + return 'Unsupported platform'; + } + + return 'Inavlid Origin. Register your new client ('.$this->host.') as a new ' + .$this->platforms[$this->client].' platform on your '.APP_NAME.' console'; + } + + /** + * Check if Origin has been whiltlisted + * for access to the API + * + * @param string $origin + * + * @return bool + */ + public function isValid($origin) + { + $scheme = parse_url($origin, PHP_URL_SCHEME); + $host = parse_url($origin, PHP_URL_HOST); + + $this->host = $host; + $this->client = $scheme; + + if(empty($host)) { + return true; + } + + if(in_array($host, $this->clients)) { + return true; + } + + return false; + } +}