124 lines
3.1 KiB
Markdown
124 lines
3.1 KiB
Markdown
---
|
|
title: "Personal Website"
|
|
description: "An open-source content management system, used for this website."
|
|
navigation: false
|
|
sub: "PHP 7, MySQL, jQuery"
|
|
img: "/img/personal-website/admin-menu.png"
|
|
date: "2025-03-03"
|
|
---
|
|
|
|
<small>Open-source content management system.<br>
|
|
Repository at
|
|
[GitHub](https://github.com/riyyi/website),
|
|
[GitLab](https://gitlab.com/riyyi/website) or
|
|
[Gitea](https://git.riyyi.com/riyyi/website).
|
|
</small>
|
|
|
|
This is the CMS that is used for this website! It's written in PHP 7, MySQL and
|
|
jQuery, with the libraries Klein.php and Mailer.
|
|
|
|
Features:
|
|
|
|
- PHP 7
|
|
- Composer
|
|
- [Klein.php](https://github.com/klein/klein.php)
|
|
- [Mailer](https://github.com/txthinking/Mailer)
|
|
- MVC design pattern
|
|
- MySQL database for storing data
|
|
- CMS with CRUD functions for managing data
|
|
- ORM for mapping between PHP classes and data
|
|
- Login system
|
|
- Stay logged in using cookies
|
|
- Forget password with a generated link send using mail
|
|
- Security mitigations
|
|
- Password hashing using BCrypt
|
|
- Per-user cryptographically secure generated salt
|
|
- SQL injection protection using prepared statements
|
|
- XSS
|
|
- Cookies set to 'HttpOnly'
|
|
- Escape rendered user input using: `htmlentities(ENT_QUOTES | ENT_HTML5, 'UTF-8');`
|
|
- CSRF
|
|
- Cookies 'SameSite' set to 'Strict'
|
|
- Token for each session used in POST/PUT/DELETE requests
|
|
- Bootstrap
|
|
- jQuery
|
|
|
|
Directory structure:
|
|
|
|
```
|
|
.
|
|
├── app
|
|
│ ├── classes
|
|
│ │ └── <classes>
|
|
│ ├── controllers
|
|
│ │ └── <controllers>
|
|
│ ├── helper.php
|
|
│ ├── model
|
|
│ │ └── <models>
|
|
│ ├── seed.php
|
|
│ ├── traits
|
|
│ │ └── Log.php
|
|
│ └── views
|
|
│ └── <views>
|
|
├── composer.json
|
|
├── config.php
|
|
├── config.php.example
|
|
├── public
|
|
│ ├── index.php
|
|
│ └── <files>
|
|
├── route.php
|
|
├── syncconfig.sh
|
|
├── syncconfig.sh.example
|
|
└── sync.sh
|
|
```
|
|
|
|
<div class="row">
|
|
<div class="col-12 col-lg-6">
|
|
|
|
Pictured below is the EER (Enhanced entity-relationship) diagram of the MySQL database:
|
|

|
|
|
|
</div>
|
|
</div>
|
|
|
|
Some of the pages of the CMS.
|
|
|
|
<div class="row">
|
|
<div class="col-12 col-lg-6">
|
|
|
|
Admin menu.
|
|

|
|
|
|
</div>
|
|
<div class="col-12 col-lg-6">
|
|
|
|
CRUD index page, displaying all the entries of this table, including pagination.
|
|

|
|
|
|
</div>
|
|
<div class="col-12 col-lg-6">
|
|
|
|
CRUD edit page, editing an entry.
|
|

|
|
|
|
</div>
|
|
<div class="col-12 col-lg-6">
|
|
|
|
CRUD show page, show all values of an entry.
|
|

|
|
|
|
</div>
|
|
<div class="col-12 col-lg-6">
|
|
|
|
Login page.
|
|

|
|
|
|
</div>
|
|
<div class="col-12 col-lg-6">
|
|
|
|
Password reset page, showing a flash message.
|
|

|
|
|
|
</div>
|
|
</div>
|