<!--
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>

This file is part of a Moko Consulting project.

SPDX-License-Identifier: GPL-3.0-or-later

This program is free software; you can redistribute it and/or modify it under the terms of
the GNU General Public License as published by the Free Software Foundation; either version 3
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License (./LICENSE).

FILE INFORMATION
DEFGROUP: mokoconsulting-tech.Template-Joomla
INGROUP: MokoStandards.Security
REPO: https://github.com/mokoconsulting-tech/Template-Joomla
VERSION: 01.01.00
PATH: /SECURITY.md
BRIEF: Security policy, vulnerability reporting procedure, and response timelines
-->

[![MokoStandards](https://img.shields.io/badge/MokoStandards-04.00.04-blue)](https://github.com/mokoconsulting-tech/MokoStandards)

# Security Policy

## Supported Versions

| Version | Supported |
| ------- | --------- |
| Latest stable release | ✅ Full support |
| Previous major release | ✅ Security patches only |
| Older releases | ✈ No support |
| `dev` / `rc` branches | ❌ Not for production |

## Reporting a Vulnerability

**Do not open a public issue for security vulnerabilities.**

Please report security issues to:

> **security@mokoconsulting.tech**

Include in your report:

1. **Description** — what the vulnerability is
2. **Reproduction** — step-by-step instructions to reproduce
3. **Impact** — what an attacker could achieve
4. **Version** — which version(s) are affected
5. **Environment** — Joomla version, PHP version, hosting environment
6. **Proof of concept** — code or screenshots if available

### PGP Encryption

If you need to send sensitive information, request our PGP key by emailing security@mokoconsulting.tech with the subject line "PGP Key Request".

## Response Timeline

| Stage | Timeline | Description |
| ----- | -------- | ----------- |
| **Acknowledgement** | Within 48 hours | We confirm receipt of your report |
| **Assessment** | Within 7 days | We evaluate severity and impact |
| **Remediation** | Within 30 days | We develop and test a fix |
| **Disclosure** | After fix release | Coordinated public disclosure |

### Severity Levels

| Level | Description | Response |
| ----- | ----------- | -------- |
| **Critical** | Remote code execution, data breach | Immediate patch, out-of-band release |
| **High** | Privilege escalation, SQL injection | Patch in next release (< 7 days) |
| **Medium** | XSS, CSRF, information disclosure | Patch in next scheduled release |
| **Low** | Minor information leak, best-practice violation | Tracked and fixed in roadmap |

## Security Practices

### Code Security
- All code is scanned with [gitleaks](https://github.com/gitleaks/gitleaks) on every push
- PHPStan static analysis runs at level 5
- All SQL uses parameterised queries via Joomla's DatabaseDriver
- Input validation uses Joomla's InputFilter
- Output escaping uses Joomla's `HtmlHelper` and template escaping
- CSRF protection via Joomla's form tokens
- Access control via Joomla's ACL system

### Release Security
- All release packages are built automatically by CI
- Release assets are checksummed (SHA-256)
- Update server URLs use HTTPS
- Download ID (`dlid`) gating for authorised access

### Infrastructure
- Git repository hosted on self-hosted Gitea instance
- Branch protection on `main`, `dev`, `rc`, `beta`, `alpha`
- Force push disabled on all protected branches
- Secrets managed via Gitea Actions secrets (not in code)

## Disclosure Policy

We follow a **coordinated disclosure** policy:

1. Reporter submits vulnerability to security@mokoconsulting.tech
2. We acknowledge and assess
3. We develop a fix and coordinate with the reporter
5. Fix is released
6. Public advisory is published

### Credit

We credit security researchers who responsibly disclose vulnerabilities (opt-out available).

## Scope

This policy covers:
- All code in this repository
- All official release packages
- The update server endpoint

This policy does **not** cover:
- Third-party Joomla extensions
- The Joomla framework itself
- Hosting environments

## Contact

- **Security reports**: security@mokoconsulting.tech
- **General inquiries**: hello@mokoconsulting.tech
- **Developer contact**: dev@mokoconsulting.tech

---

## Metadata

| Field | Value |
| ----- | ----- |
| Document Type | Policy |
| Domain | Security |
| Applies To | mokoconsulting-tech/Template-Joomla |
| Maintainer | @mokoconsulting-tech |
| Standards | MokoStandards v04.00.04 |
| Repo | https://github.com/mokoconsulting-tech/Template-Joomla |
| Path | /SECURITY.md |
| Status | Active — auto-maintained by MokoStandards |
