From e7f9751403fe3158496694f514acb9373c99d588 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Fri, 20 Nov 2015 08:08:39 -0700 Subject: [PATCH 01/11] add new `Page.relativePagePath` helper method --- system/src/Grav/Common/Page/Page.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index bc6b90024..00a0f756f 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -1484,7 +1484,17 @@ class Page */ public function filePathClean() { - return str_replace(ROOT_DIR, '', $this->filePath()); + $path = str_replace(ROOT_DIR, '', $this->filePath()); + return $path; + } + + /** + * Returns the clean path to the page file + */ + public function relativePagePath() + { + $path = str_replace('/'.$this->name, '', $this->filePathClean()); + return $path; } /** From f9e137c99407ca76fe9f534aede480bda989efea Mon Sep 17 00:00:00 2001 From: Djamil Legato Date: Fri, 20 Nov 2015 12:40:48 -0800 Subject: [PATCH 02/11] Added `pad` filter for strings (uses str_pad) --- system/src/Grav/Common/Twig/TwigExtension.php | 17 ++++++++++++ system/src/Grav/Common/Utils.php | 27 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/system/src/Grav/Common/Twig/TwigExtension.php b/system/src/Grav/Common/Twig/TwigExtension.php index aa8c4a3ee..4ea09e350 100644 --- a/system/src/Grav/Common/Twig/TwigExtension.php +++ b/system/src/Grav/Common/Twig/TwigExtension.php @@ -70,6 +70,7 @@ class TwigExtension extends \Twig_Extension new \Twig_SimpleFilter('randomize', [$this,'randomizeFilter']), new \Twig_SimpleFilter('modulus', [$this,'modulusFilter']), new \Twig_SimpleFilter('rtrim', [$this, 'rtrimFilter']), + new \Twig_SimpleFilter('pad', [$this, 'padFilter']), new \Twig_SimpleFilter('safe_email', [$this,'safeEmailFilter']), new \Twig_SimpleFilter('safe_truncate', ['\Grav\Common\Utils','safeTruncate']), new \Twig_SimpleFilter('safe_truncate_html', ['\Grav\Common\Utils','safeTruncateHTML']), @@ -537,6 +538,22 @@ class TwigExtension extends \Twig_Extension return Utils::generateRandomString($count); } + /** + * Pad a string to a certain length with another string + * + * @param $input + * @param $pad_length + * @param string $pad_string + * @param int $pad_type + * + * @return string + */ + public static function padFilter($input, $pad_length, $pad_string = " ", $pad_type = STR_PAD_RIGHT) + { + return str_pad($input, (int) $pad_length, $pad_string, $pad_type); + } + + /** * Cast a value to array * diff --git a/system/src/Grav/Common/Utils.php b/system/src/Grav/Common/Utils.php index e0888e209..515d05851 100644 --- a/system/src/Grav/Common/Utils.php +++ b/system/src/Grav/Common/Utils.php @@ -100,6 +100,9 @@ abstract class Utils return (object)array_merge((array)$obj1, (array)$obj2); } + /** + * @return array + */ public static function dateFormats() { $now = new DateTime(); @@ -300,11 +303,19 @@ abstract class Utils return $root . implode('/', $ret); } + /** + * @param $function + * + * @return bool + */ public static function isFunctionDisabled($function) { return in_array($function, explode(',', ini_get('disable_functions'))); } + /** + * @return array + */ public static function timezones() { $timezones = \DateTimeZone::listIdentifiers(\DateTimeZone::ALL); @@ -332,6 +343,12 @@ abstract class Utils } + /** + * @param array $source + * @param $fn + * + * @return array + */ public static function arrayFilterRecursive(Array $source, $fn) { $result = array(); @@ -351,6 +368,11 @@ abstract class Utils return $result; } + /** + * @param $string + * + * @return bool + */ public static function pathPrefixedByLangCode($string) { $languages_enabled = self::getGrav()['config']->get('system.languages.supported', []); @@ -362,6 +384,11 @@ abstract class Utils return false; } + /** + * @param $date + * + * @return int + */ public static function date2timestamp($date) { $config = self::getGrav()['config']; From bde33e7188dd5445e80732cf5d5f1c2e869e597c Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Fri, 20 Nov 2015 14:59:58 -0700 Subject: [PATCH 03/11] Lighttpd/Lightly configuration file - Thanks @Mr3ase --- lighttpd.conf | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 lighttpd.conf diff --git a/lighttpd.conf b/lighttpd.conf new file mode 100644 index 000000000..69acbe484 --- /dev/null +++ b/lighttpd.conf @@ -0,0 +1,48 @@ +############# DO NOT FORGET TO CHANGE "grav_path" BY YOUR ACTUAL GRAV INSTALLATION FOLDER ############# +############# IF GRAV IS AT THE ROOT OF YOUR WEBSITE, ie http://yoursite.tld POINTS TO ############# +############# GRAV DIRECTLY, THEN JUST REMOVE ANY "/grav_path/" MENTION BELOW. OTHERWISE ############# +############# WE ASSUME YOU RUN AN INSTALLATION SUCH AS http://yoursite.tld/grav_path/ ############# +####################################################################################################### +### GRAV RULES FOR LIGHTTPD ### +### By Mr3ase ### +### Last Rev. 2015/11/20 ### + +#PREVENTING EXPLOITS +$HTTP["querystring"] =~ "base64_encode[^(]*\([^)]*\)" { + url.redirect = (".*" => "/grav_path/index.php" ) +} +$HTTP["querystring"] =~ "(<|%3C)([^s]*s)+cript.*(>|%3E)" { + url.redirect = (".*" => "/grav_path/index.php" ) +} +$HTTP["querystring"] =~ "GLOBALS(=|\[|\%[0-9A-Z])" { + url.redirect = (".*" => "/grav_path/index.php" ) +} +$HTTP["querystring"] =~ "_REQUEST(=|\[|\%[0-9A-Z])" { + url.redirect = (".*" => "/grav_path/index.php" ) +} + +#REROUTING TO THE INDEX PAGE +url.rewrite-if-not-file = ( + "^/grav_path/(.*)$" => "/grav_path/index.php" +) + +#IMPROVING SECURITY +$HTTP["url"] =~ "^/grav_path/(LICENSE|composer.json|composer.lock|nginx.conf|web.config)$" { + url.access-deny = ("") +} +$HTTP["url"] =~ "^/grav_path/(.git|cache|bin|logs|backup)/(.*)" { + url.access-deny = ("") +} +$HTTP["url"] =~ "^/grav_path/(system|user|vendor)/(.*)\.(txt|md|html|yaml|php|twig|sh|bat)$" { + url.access-deny = ("") +} +$HTTP["url"] =~ "^/grav_path/(\.(.*))|(\.(.*)/)" { + url.access-deny = ("") +} +url.access-deny = (".md","~",".inc") + +#PREVENT BROWSING AND SET INDEXES +$HTTP["url"] =~ "^/grav_path($|/)" { + dir-listing.activate = "disable" + index-file.names = ( "index.php", "index.html" , "index.htm" ) +} From 16db95000900c9342c64dc81ff218a23bc3ebd12 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Fri, 20 Nov 2015 17:34:02 -0700 Subject: [PATCH 04/11] composer updates --- composer.lock | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/composer.lock b/composer.lock index d3a9d25b8..c6c4fe6d9 100644 --- a/composer.lock +++ b/composer.lock @@ -1,23 +1,24 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], "hash": "e1db721096772d41f16003b39b47c85a", + "content-hash": "294dd2282a332d96b19d163ad08e7ba7", "packages": [ { "name": "doctrine/cache", - "version": "v1.5.0", + "version": "v1.5.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "eb8a73619af4f1c8711e2ce482f5de3643258a1f" + "reference": "2b9cec5a5e722010cbebc91713d4c11eaa064d5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/eb8a73619af4f1c8711e2ce482f5de3643258a1f", - "reference": "eb8a73619af4f1c8711e2ce482f5de3643258a1f", + "url": "https://api.github.com/repos/doctrine/cache/zipball/2b9cec5a5e722010cbebc91713d4c11eaa064d5e", + "reference": "2b9cec5a5e722010cbebc91713d4c11eaa064d5e", "shasum": "" }, "require": { @@ -74,7 +75,7 @@ "cache", "caching" ], - "time": "2015-10-28 11:27:45" + "time": "2015-11-02 18:35:48" }, { "name": "donatj/phpuseragentparser", @@ -216,12 +217,12 @@ "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "9a393ceb80f7497b6513feb574638e87048fed55" + "reference": "50a288b51058fa94cf5b37cfa4277535983cc9d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/9a393ceb80f7497b6513feb574638e87048fed55", - "reference": "9a393ceb80f7497b6513feb574638e87048fed55", + "url": "https://api.github.com/repos/filp/whoops/zipball/50a288b51058fa94cf5b37cfa4277535983cc9d5", + "reference": "50a288b51058fa94cf5b37cfa4277535983cc9d5", "shasum": "" }, "require": { @@ -266,7 +267,7 @@ "whoops", "zf2" ], - "time": "2015-09-27 09:47:06" + "time": "2015-11-14 20:08:27" }, { "name": "gregwar/cache", @@ -929,16 +930,16 @@ }, { "name": "twig/twig", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "5868cd822fd6cf626d5f805439575f9c323cee2a" + "reference": "d9b6333ae8dd2c8e3fd256e127548def0bc614c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/5868cd822fd6cf626d5f805439575f9c323cee2a", - "reference": "5868cd822fd6cf626d5f805439575f9c323cee2a", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/d9b6333ae8dd2c8e3fd256e127548def0bc614c6", + "reference": "d9b6333ae8dd2c8e3fd256e127548def0bc614c6", "shasum": "" }, "require": { @@ -986,7 +987,7 @@ "keywords": [ "templating" ], - "time": "2015-10-29 23:29:01" + "time": "2015-11-05 12:49:06" } ], "packages-dev": [], From aee92b58c73ee458d79eb58a5db5245a40ed8e4a Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Fri, 20 Nov 2015 17:34:34 -0700 Subject: [PATCH 05/11] Updated composer.phar --- bin/composer.phar | Bin 1147592 -> 1181186 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bin/composer.phar b/bin/composer.phar index 72b1546b2ff5624ec65ce7deecd8194c0580a44d..3c67d598392a72a040f00e94c63df25ec3523675 100755 GIT binary patch delta 44181 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 Ov-shlS83lteg7XArS=a1 From 2a0a9a225c6889ab506560eb31e85b41c88ce305 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Fri, 20 Nov 2015 17:54:28 -0700 Subject: [PATCH 06/11] version update --- CHANGELOG.md | 41 +++++++++++++++++++++++++++++++++++++++-- system/defines.php | 2 +- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e53a1799..764aff8f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,46 @@ # v1.0.0-rc.5 -## XX/XX/2015 +## 11/20/2015 1. [](#new) + * Added **nonce** functionality for all admin forms for improved security * Implemented the ability for Plugins to provide their own CLI commands through `bin/plugin` - * Fixed gzip compression making it to work correctly with all servers and browsers + * Added Croatian translation + * Added missing `umask_fix` property to `system.yaml` + * Added current theme's config to global config. E.g. `config.theme.dropdown_enabled` + * Added `append_url_extension` option to system config & page headers + * Users have a new `state` property to allow disabling/banning + * Added new `Page.relativePagePath()` helper method + * Added new `|pad` Twig filter for strings (uses `str_pad()`) + * Added `lighttpd.conf` for Lightly web server +1. [](#improved) + * Clear previously applied operations when doing a reset on image media + * Password no longer required when editing user + * Improved support for trailing `/` URLs + * Improved `.nginx.conf` configuration file + * Improved `.htaccess` security + * Updated vendor libs + * Updated `composer.phar` + * Use streams instead of paths for `clearCache()` + * Use PCRE_UTF8 so unicode strings can be regexed in Truncator + * Handle case when login plugin is disabled + * Improved `quality` functionality in media handling + * Added some missing translation strings + * Deprecated `bin/grav newuser` in favor of `bin/plugin login new-user` + * Moved fallback types to use any valid media type + * Renamed `system.pages.fallback_types` to `system.media.allowed_fallback_types` + * Removed version number in default `generator` meta tag + * Disable time limit in case of slow downloads + * Removed default hash in `system.yaml` +1. [](#bugfix) + * Fix for media using absolute URLs causing broken links + * Fix theme auto-loading #432 + * Don't create empty `