Tuskfish CMS Developer Guide https://tuskfish.biz/rss/?id=47 Contents Introduction About this guide The quick and dirty version A few principles Stuff you won't find in Tuskfish List of subsystems Tour of the file system Overview of the architecture Content objects Handling content objects The database Composing queries Tags, collections and sections The cache Image cache Page cache Site preferences Accessing preferences Editing preferences Adding new preferences Search RSS feeds The theme and template system Themes Assigning themes to pages Switching themes conditionally Cloning an existing theme Templates Assigning data to templates Rendering templates Bootstrap Modifying a Bootstrap template to work with Tuskfish Anatomy of a typical page Security How secure is Tuskfish CMS? Single admin system Explicitly minimised attack surface Rigorous multi-level validation Prepared statements and bound parameters Optional two-factor authentication No online password recovery Single origin code If you do find a problem Sessions Initialising sessions Session security Admin authentication Validating and escaping data Developing in a hostile environment Validate don't sanitise Escape data at the point of use Validating input parameters An example of data validation Character encoding Character restrictions Mitigating SQL injection Mitigating XSS attacks Metadata and pagination Site level metadata Page level metadata Overriding metadata Creating blocks About blocks Static blocks Dynamic blocks Creating your own dynamic blocks File operations Uploading a file Appending to a file Downloading a file Deleting a file Clearing a directory Deleting a directory File type restrictions on uploads Logging errors Webserver hacks: Rattle and hum Allowing cross-site requests Setting a custom error page Forcing SSL Useful tools and resources Tools Resources Development road map [email protected] [email protected] Copyright all rights reserved