7.0 KiB
7.0 KiB
Codebase Concerns
Analysis Date: 2026-04-27
Security Considerations
Credentials committed to repository:
- Risk: DB credentials and SMTP credentials checked into version control
- Files:
_rejestracja/core/config/db.config.ini,_rejestracja/core/config/smtp.config.ini - Current mitigation: None — production secrets in plaintext in repo
- Recommendations: Move to gitignored config files; add
.gitignoreentry; rotate credentials if repo is/was public
Web-accessible migration runners:
- Risk: Anyone who knows the URL can trigger
ALTER TABLEoperations on production DB - Files:
_rejestracja/sql/apply-*.php(all runner files) - Current mitigation: Requires
?run=YYYYMMDDparam to prevent accidental execution - Recommendations: Move runners outside web root, or add IP/auth check before execution
eval() usage in core:
- Risk: Remote code execution if user input reaches eval
- Files: Detected in
_rejestracja/core/class/(exact file TBD — needs verification) - Current mitigation: Unknown — depends on what is eval'd
- Recommendations: Audit eval usage; replace with explicit logic where possible
No input sanitization layer:
- Risk: SQL injection if user input bypasses DAL parameterization; XSS if template escaping is skipped
- Files:
_rejestracja/controller/IndexController.php— usesRequest::GetPost()directly - Current mitigation: Smarty auto-escaping in templates; DAL may use parameterized queries (verify)
- Recommendations: Audit DAL for raw query concatenation; confirm all template output uses
|escape
Tech Debt
core/_model/ directory duplication:
- Issue: 78 files in
_rejestracja/core/_model/mirror_rejestracja/core/model/but are NOT loaded by the autoloader - Files: All files in
_rejestracja/core/_model/ - Why: Historical backup that was never deleted
- Impact: Confusing when navigating; edits to
_model/are silently ignored; risk of editing wrong file - Fix approach: Delete
_rejestracja/core/_model/entirely — it serves no runtime purpose
Commented-out debug calls throughout controllers:
- Issue:
//Utils::ArrayDisplay(Request::GetAllPost());and similar calls left in code - Files:
_rejestracja/Admin/controller/CalcController.php(lines 54, 118), others - Why: Dev debugging not cleaned up
- Impact: Clutter; risk of accidentally uncommenting in production
- Fix approach: Remove all commented-out debug calls during any refactor pass
TODO about disc field in IndexController:
- Issue: Unresolved logic around the
discfield in fee calculation - Files:
_rejestracja/controller/IndexController.php - Why: Deferred during earlier development
- Impact: Potentially incorrect discount pricing in edge cases
- Fix approach: Review
discfield handling; either implement or document the intended behavior
setSortBy() raw string injection:
- Issue:
DalData::setSortBy()injects value directly intoORDER BYSQL clause with no escaping - Files:
_rejestracja/core/class/DefaultDAL.class.php, all callers - Why: Design choice for simplicity
- Impact: SQL injection risk if sort value ever comes from user input (currently hardcoded — low risk)
- Fix approach: Whitelist allowed sort columns; never pass user input to
setSortBy()
Fragile Areas
core/core.php autoloader:
- Files:
_rejestracja/core/core.php - Why fragile:
spl_autoload_registerloads fromcore/model/— if class naming deviates fromMf{Entity}.class.phpconvention, autoload silently fails - Common failures: Editing
core/_model/instead ofcore/model/(no error, just stale behavior) - Safe modification: Always verify you're editing
core/model/notcore/_model/
$fields array in model classes:
- Files: All
_rejestracja/core/model/Mf*.class.php - Why fragile:
$fieldsarray must exactly match DB column names; mismatch means property readsnullsilently - Common failures: Adding a DB column without updating
$fields; typo in column name - Safe modification: After adding to
$fields, verify getter returns expected value from DB
Smarty template variable assignment:
- Files: All
_rejestracja/template/and_rejestracja/Admin/template/.tplfiles - Why fragile: If controller doesn't
assign()a variable, Smarty silently outputs empty string — no error - Common failures: Renaming a controller variable without updating template references
- Safe modification: Search for the variable name in both controller and all related templates before renaming
Known Bugs
RegDeleteAction deletes wrong record:
- Symptoms:
CalcController::RegDeleteActioncallsMfParametersDAL::Delete($dalData)instead ofMfParticipantDAL::Delete($dalData)— DAL class mismatch - Files:
_rejestracja/Admin/controller/CalcController.phplines 187–206 - Workaround: Unknown — may delete a pricing parameter row instead of the participant
- Root cause: Copy-paste error in controller method; wrong DAL class referenced
Performance Bottlenecks
No query caching:
- Problem: Every request hits MySQL —
mf_dictionaryis read on every page load for every{translate}call - Files:
_rejestracja/core/model/MfDictionaryDAL.class.php, all templates using{translate} - Cause: No caching layer; MySQL query per translation key
- Improvement path: Cache dictionary in PHP session or static array per request
No pagination on admin registration list:
- Problem:
CalcController::RegActionloads allmf_participantrows into memory with no LIMIT - Files:
_rejestracja/Admin/controller/CalcController.php(RegAction),_rejestracja/Admin/template/partial/Calc/Reg.tpl - Cause:
DalDatahas no pagination set; template has commented-out pager HTML - Impact: Will degrade significantly as registration count grows past a few hundred rows
Dependencies at Risk
PHP 5.x:
- Risk: PHP 5.x is end-of-life since December 2018; no security patches
- Impact: Known PHP 5.x vulnerabilities unpatched on production server
- Migration plan: Requires testing all code for PHP 7.x/8.x compatibility (significant effort)
jQuery 1.x:
- Risk: jQuery 1.x is unmaintained; known XSS vulnerabilities in older versions
- Impact: Frontend JS security issues
- Migration plan: Upgrade to jQuery 3.x or replace with vanilla JS
Bundled Smarty / PHPMailer:
- Risk: Vendor-bundled libraries in
core/lib/may be outdated versions with unpatched CVEs - Impact: Template injection (Smarty), email header injection (PHPMailer)
- Migration plan: Replace with Composer-managed dependencies and current versions
Test Coverage Gaps
Everything — no tests exist:
- What's not tested: All application logic
- Files: All of
_rejestracja/ - Risk: Any code change could introduce silent regressions; verified by manual testing only
- Priority: High for
IndexController.php(primary user-facing flow) andDefaultDAL.class.php(affects all DB operations) - Difficulty to test: Medium — PHP 5.x compatible test framework required; DAL tests need DB fixture
Concerns audit: 2026-04-27 Update as issues are fixed or new ones discovered