Flaxon 0.3.0 and Teloce-Py 0.3.0 are available on PyPI. Release instructions are maintained on this site; source links identify the framework snapshot. Check version and upgrade guidance.
For generated projects, use the shared settings.py, Flaxon.from_settings(),
explicit mounts in app.py, and management.py workflow. See ORM and project management
for Python migrations, model registration, permission hooks, relationship editing,
and Admin/CMS metadata storage. Backend-only and legacy adapter examples remain supported.
Security
Overview
Security is an important part of Flaxon's design.
Flaxon provides secure defaults and documentation to help developers build safer applications.
The framework includes support for:
- Template autoescaping
- Request validation
- Security headers
- Request identifiers
- Sensitive data redaction
- Production-safe error handling
- Rate limiting
Security features reduce common risks, but developers are still responsible for following secure application practices.
Built-in Security Features
Autoescaping
Jinax templates automatically escape HTML and XML content to help prevent Cross-Site Scripting (XSS) attacks.
Example:
{{ user_input }}
````
Unsafe characters are escaped before being rendered.
---
# Request Validation
Flaxon supports declarative schemas for validating incoming data before processing.
Example:
```python
from flaxon.validation import Schema, fields
class CreateUser(Schema):
name = fields.StrField(
required=True,
min_length=2
)
email = fields.EmailField(
required=True
)
Validation helps prevent malformed or unexpected input from reaching application logic.
Security Headers
Flaxon can apply recommended security headers.
Common headers include:
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy:
geolocation=(),
microphone=(),
camera=()
These headers help protect against:
- Content type attacks
- Clickjacking
- Unnecessary browser permissions
Request IDs
Every request can receive a unique identifier.
Request IDs help with:
- Debugging
- Logging
- Distributed tracing
- Production troubleshooting
Example:
Request-ID: fx-8a72c91d
Sensitive Data Redaction
Flaxon avoids exposing sensitive information in logs and debug output.
Sensitive values should be protected, including:
- Passwords
- Secrets
- Authentication tokens
- API keys
- Private keys
- Credit card information
- Authorization headers
Production-Safe Errors
In production mode, Flaxon returns safe error responses.
Production errors should:
- Hide internal tracebacks
- Avoid exposing application details
- Provide useful error identifiers
Detailed debugging information should only be enabled in development environments.
Rate Limiting
Rate limiting helps prevent abuse by restricting excessive requests.
Use cases include:
- API protection
- Login protection
- Resource management
- Abuse prevention
Security Recommendations
Admin and CMS Hardening
For Admin deployments, configure a shared Redis backend for sessions and
distributed request limits, keep CSRF enabled, and use session_idle_timeout
with HTTPS-only deployment. Password-reset and MFA operations are separately
limited by account and IP when Redis is configured.
Media uploads can use a scanner callback, SHA-256 metadata, EXIF removal, and
S3 presigned URLs. A scanner callback is only production antivirus protection
when connected to an actual engine such as ClamAV; returning True from a test
callback does not scan files.
Audit records are hash chained and can be checked with
GET /admin/audit/verify. Keep audit storage append-only at the database and
infrastructure layers, and define a retention policy before deployment.
Production Checklist
Before deploying a Flaxon application:
- Set
FLAXON_DEBUG=false - Set
FLAXON_SECRET_KEYwith 32+ random bytes - Configure
FLAXON_ALLOWED_HOSTS - Enable HTTPS
-
Use secure cookies:
-
Secure HttpOnlySameSite- Implement authentication and authorization
- Enable rate limiting
- Validate all user input
- Use parameterized database queries
- Keep dependencies updated
- Scan dependencies for vulnerabilities
Authentication
Flaxon supports authentication backends for securing protected routes.
Example:
from flaxon.security import JWTBackend, login_required
app = Flaxon(
"secure-app"
)
backend = JWTBackend(
secret_key="your-secret"
)
@app.post("/login")
async def login(request):
user = await authenticate_user(
data
)
token = await backend.create_token(
user
)
return {
"token": token
}
@app.get("/protected")
@login_required
async def protected(request):
user = getattr(
request,
"user",
None
)
return {
"user": user.to_dict()
}
CSRF Protection
For applications using cookies and browser sessions, enable CSRF protection.
Example:
from flaxon.security import CSRFMiddleware
app.add_middleware(
CSRFMiddleware,
secret_key="your-secret"
)
CORS Configuration
Configure Cross-Origin Resource Sharing (CORS) carefully.
Example:
from flaxon.middleware import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allowed_origins=[
"https://example.com"
],
allow_credentials=True
)
Avoid allowing unrestricted origins in production environments.
Rate Limiting Configuration
Example:
from flaxon.security import RateLimitMiddleware
app.add_middleware(
RateLimitMiddleware,
requests=60,
window_seconds=60
)
Threat Mitigation
| Threat | Control |
|---|---|
| XSS | Template escaping, Content Security Policy |
| SQL Injection | Parameterized queries, validation |
| Credential Theft | Secure password hashing, MFA |
| Token Abuse | Short-lived tokens, refresh rotation |
| CSRF | CSRF tokens |
| DDoS | Rate limiting, timeouts |
| Data Leakage | Redaction, safe error handling |
| Supply Chain Attacks | Dependency pinning, security scanning |
Reporting Vulnerabilities
If you discover a security vulnerability in Flaxon:
Please report it responsibly.
Contact:
aldanehutchinson5@gmail.com
or create a private security advisory through the Flaxon GitHub repository.
Please do not publicly disclose security issues before they are reviewed and addressed.
Authentication and session migration
See request security upgrades for standard JWTs, Argon2 upgrades, typed query validation and lazy session creation.