| Version | Supported |
|---|---|
| 1.0.x | ✅ |
We take security vulnerabilities seriously. If you discover a security issue, please report it responsibly.
DO NOT create a public GitHub issue for security vulnerabilities.
Instead, please email security concerns to: security@yourdomain.com
Include the following information:
- Description - Clear description of the vulnerability
- Steps to Reproduce - Detailed steps to reproduce the issue
- Impact - Potential impact of the vulnerability
- Affected Versions - Which versions are affected
- Suggested Fix - If you have one (optional)
- Acknowledgment: We will acknowledge receipt within 48 hours
- Assessment: We will assess the severity and impact
- Updates: We will keep you informed of our progress
- Resolution: We aim to resolve critical issues within 7 days
- Credit: We will credit reporters in our security advisories (unless anonymity is requested)
The following are in scope for security reports:
- PropManager application code
- Authentication and authorization vulnerabilities
- Data exposure risks
- Injection vulnerabilities (SQL, XSS, etc.)
- Payment processing security issues
- API security issues
Out of scope:
- Social engineering attacks
- Physical security
- Denial of service attacks
- Issues in third-party dependencies (report to the respective project)
PropManager implements the following security measures:
- OTP Authentication: Tenants use passwordless magic link login
- Session Management: Secure session handling with configurable timeouts
- Staff Authentication: Standard Django authentication for admin users
- Token-Based Access: Secure, time-limited tokens for contractors and document signing
- Role-Based Access Control: Admin, Manager, Staff roles with different permissions
- Property-Level Access: Users can be restricted to specific properties
- Tenant Isolation: Tenants can only access their own data
- CSRF Protection: Django's built-in CSRF protection on all forms
- SQL Injection Prevention: Django ORM prevents SQL injection
- XSS Prevention: Template auto-escaping prevents XSS
- Secure Headers: Recommended security headers for production
- PCI Compliance: No card data stored locally - handled by payment gateways
- Webhook Verification: All payment webhooks verify signatures
- Encrypted Communication: HTTPS required for all payment operations
- Unique Tokens: Cryptographically random signing tokens
- Token Expiration: Signing links expire after 7 days
- IP Logging: IP address recorded with each signature
- Timestamp Recording: Exact signing time recorded
- Signature Storage: Signatures stored as images with full audit trail
- Use Strong Passwords: Admin accounts should use strong, unique passwords
- Enable 2FA: Where possible, enable two-factor authentication
- Review Access: Regularly audit user access and permissions
- Monitor Logs: Review application logs for suspicious activity
- Keep Updated: Apply security updates promptly
- Use HTTPS: Always serve over HTTPS in production
- Secure Environment Variables: Never commit secrets to version control
- Database Security: Use strong database passwords, restrict access
- Firewall Configuration: Only expose necessary ports
- Regular Backups: Maintain encrypted backups
Sensitive configuration should be in environment variables:
# Never commit these to version control
SECRET_KEY=<strong-random-key>
DATABASE_URL=<connection-string>
STRIPE_SECRET_KEY=<api-key>
TWILIO_AUTH_TOKEN=<token>-
DEBUG = Falsein production -
SECRET_KEYis unique and random -
ALLOWED_HOSTSis properly configured - HTTPS is enforced
- Database credentials are secure
- All API keys are protected
- File permissions are restrictive
- Error pages don't expose sensitive information
# settings/production.py
DEBUG = False
ALLOWED_HOSTS = ['yourdomain.com']
# Security headers
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
X_FRAME_OPTIONS = 'DENY'
# HTTPS
SECURE_SSL_REDIRECT = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
# Session security
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_HTTPONLY = True
CSRF_COOKIE_SECURE = True
# Content Security Policy (if using django-csp)
CSP_DEFAULT_SRC = ("'self'",)If you suspect a security incident:
- Contain: Isolate affected systems if necessary
- Assess: Determine the scope and impact
- Preserve: Keep logs and evidence
- Notify: Inform affected users if data was compromised
- Remediate: Fix the vulnerability
- Review: Conduct a post-incident review
Security updates are released as patch versions (e.g., 1.0.1).
Subscribe to security notifications:
- Watch the GitHub repository
- Join the mailing list (if available)
PropManager is designed to minimize PCI scope:
- No card data is stored locally
- Payment processing is handled by certified gateways
- Webhook data does not include full card numbers
For EU users:
- User data can be exported
- Users can request data deletion
- Consent is obtained for data processing
- Data minimization principles are followed
Configure data retention policies:
- Payment records: Keep for tax/legal requirements
- Logs: Rotate based on your retention policy
- Backups: Encrypt and secure
We thank the following individuals for responsibly disclosing security issues:
No reports yet - be the first!
Last Updated: February 2025