Technical highlights - General Development Systems

Technical highlights

FolderCMS Logo

FolderCMS uses the most natural database possible

Most websites (including this one) consist of pages of information arranged into a hierarchy of nested categories containing pages of content. Your computer already uses a filesystem based around the idea of nested folders containing files of information. Why add the complexity of a table-based database system when the computer's existing filesystem is a natural fit to the task at hand?

By not depending on an additional database management system, a FolderCMS deployment is not only lean and fast, it is simple to maintain. There is a one-to-one relationship between a file (or folder) and a corresponding page (or category). FolderCMS provides enormous conceptual clarity in its implementation; there is no mess of mysterious files as with other content management systems (which unwittingly obfusticate the relationship between files and content). The person maintaining the website can manipulate files and folders directly, and every file or folder in the user's content tree has a clear purpose.

Geared to the way filesystems work

There are several other content management systems available that use the computer's filesystem to implement a 'database' for page content, but FolderCMS is faster. Why? Because FolderCMS is designed to avoid opening files at all.

Every time you have to open or close a file to read its contents, there is a small associated time cost (this is true even on solid-state drives, though much reduced). FolderCMS stores page and category metadata within directories rather than files, by putting information such as page order in menus, page titles and required authorisation flags (if required for certain pages) in the filenames themselves. To build each menu on a page, FolderCMS only needs to open and read the directory representing that category folder, not each individual file inside.

This not only makes FolderCMS very fast, it makes it very scalable too. Even for a very large website (well-balanced with content distributed evenly into various deep-nested categories), FolderCMS scales logarithmically, meaning performance does not degrade proportionately to the number of pages on your site, but proportionately to the order of magnitude of pages on your site.

Secure by design

You might think that using the webserver's native filesystem as a way of organising content might pose a security risk. However, FolderCMS takes a failsafe approach to make sure potential attackers cannot arbitrarily browse the filesystem. Rather than merely sanitising the user's page request, FolderCMS first constructs a set of valid relative content paths on the fly, prior to evaluating the user's request. This set consists of only the pages and categories that FolderCMS regards as content available for public browsing. The user's request is evaluated only against this set of valid content, never the actual filesystem. Then the destination path is constructed from the set of valid content; the user's URL request data is not used even in a sanitised state. In terms of preventing unauthorised access to the filesystem, this approach of never allowing URL requests to come into contact with the filesystem eliminates even unforesen kinds of URL injection attacks, and goes beyond the level of protection afforded by input sanitising alone.

Less than 20 kilobytes!

FolderCMS is distributed as a PHP script since this is a prevalent scripting platform ubiquitous among LAMP servers. PHP is not the most efficient language in performance terms but it is ubiquitous. To keep things fast, FolderCMS is very small. The foldercms.php script itself is less than 20 kilobytes in size. No other files are reqiured except for the ones you'll add yourself as you build your website (namely your page template and content).