-
Notifications
You must be signed in to change notification settings - Fork 1
A simple PHP university project
License
matjon/my_forum
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
To clone this repository: git clone https://github.com/matjon/my_forum.git cd my_forum git submodule init git submodule update The purpose of this project was to learn PHP. Therefore, I spent much time on refactoring and ensuring that this project is well designed. The most important thing that is left to make the project well designed is the unified handling of forms. There should be one class (with subclasses) that is responsible for creating them and processing the queries. Early work on this can be found in the file form_support.php. Properties of the code: Security: - this code uses PDO (prepared statements) for all DB access, because they are almost completely immune to SQL Injection attacks. - all user-generated content that is written to HTML is escaped using a custom function named escape_str_in_usual_html_pl. This is a thin wrapper over htmlspecialchars that sets some additional options. This should prevent XSS. - Most forms are protected against CSRF attacks. (except for login/new user forms, but there CSRF would be rather harmless). - Passwords are hashed using the BLOWFISH algorithm using a function that was introduced in PHP 5.5. A compatibility library is used on older systems. UTF-8: - all texts in the program are handled in UTF-8. That includes input files, generated HTML and data stored in the database. - all strings in the database are stored in columns of type varbinary. This is the best way to enable storage of characters beyond the Basic Multilingual Plane (for example: 😁 🐮 🐭 🐵 ) in MySQL. - non-latin UTF-8 letters are allowed in usernames. Object-oriented programming: - This code uses classes for implementing domain objects. - The classes are real classes, they contain both fields and logic. - As specified in the PSR-0, classes are autoloaded. This is done by example code mentioned in http://www.php-fig.org/psr/psr-0/ - PDO class loading mechanisms (PDOStatement::fetchObject) are employed to load classes from the database. Support for PSR interoperatibility standards: - PSR-0 Autoloading Standard(http://www.php-fig.org/psr/psr-0/). This program conforms to PSR-0, but does not use VendorName in the namespace hierarchy, because it is not designed to be used as a module in an external system. - PSR-1 Basic Coding Standard - full conformity except for method name requirements. This code used under_score method names, PSR-1 requires camelCase. Changing this now would require too much work, but methods of future classes will be named correctly. - PSR-2 - mostly, especially for newer code. The most important practise not followed is correct indentation, but that should be corrected in the future.
About
A simple PHP university project
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published