Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Supabase Configuration
VITE_SUPABASE_URL=your_supabase_project_url_here # Your Supabase project URL
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key_here # Public anon key for client-side Supabase
VITE_SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key_here # Service role key for admin operations (keep secure!)
# WARNING: NEVER expose service role key on client-side - use server-side only

# Application Configuration
VITE_APP_NAME=Basic Intelligence Community School # Application name for display
Expand All @@ -15,9 +15,9 @@ NODE_ENV=development # Environment: development, production, or test
# Monitoring & Analytics
SENTRY_DSN=your_sentry_dsn_here # Sentry DSN for error tracking

# Payment Providers
PAYSTACK_SECRET=your_paystack_secret_key_here # Paystack secret key for Nigerian payments
STRIPE_SECRET=your_stripe_secret_key_here # Stripe secret key for international payments
# Payment Providers (Server-side only - NEVER expose to client)
# STRIPE_SECRET=your_stripe_secret_key_here # Stripe secret key for international payments
# PAYSTACK_SECRET=your_paystack_secret_key_here # Paystack secret key for Nigerian payments

# Email Service (for local development only - production uses Vercel environment variables)
EMAIL_SERVICE_API_KEY=your_email_service_key_here # API key for email service (Resend, SendGrid, etc.)
Expand All @@ -34,9 +34,11 @@ PAYPAL_CLIENT_SECRET=your_paypal_client_secret_here # PayPal client secret for p
ADMIN_EMAIL=admin@example.com # Default admin email
ADMIN_PASSWORD=your_secure_admin_password_here # Default admin password

# Security
JWT_SECRET=your_jwt_secret_here # Secret key for JWT token generation
ENCRYPTION_KEY=your_encryption_key_here # Key for data encryption
# Security (Server-side only - NEVER expose to client)
# JWT_SECRET=your_jwt_secret_here # Secret key for JWT token generation
# ENCRYPTION_KEY=your_encryption_key_here # Key for data encryption
# SESSION_SECRET=your_session_secret_here # Secret for session management
# COOKIE_SECRET=your_cookie_secret_here # Secret for cookie encryption

# Database (if using external database)
DATABASE_URL=your_database_url_here # Database connection string
Expand All @@ -45,9 +47,9 @@ DATABASE_URL=your_database_url_here # Database connection string
UPLOAD_PATH=./uploads # Local file upload path
MAX_FILE_SIZE=5242880 # Maximum file size in bytes (5MB)

# Session Configuration
SESSION_SECRET=your_session_secret_here # Secret for session management
COOKIE_SECRET=your_cookie_secret_here # Secret for cookie encryption
# Session Configuration (Server-side only)
# SESSION_SECRET=your_session_secret_here # Secret for session management
# COOKIE_SECRET=your_cookie_secret_here # Secret for cookie encryption

# CORS Configuration
CORS_ORIGIN=http://localhost:3000 # Allowed CORS origins
Expand Down
155 changes: 155 additions & 0 deletions SECURITY_AUDIT_REPORT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
# Security Audit Report & Recommendations

## 🚨 CRITICAL SECURITY ISSUES FIXED

### 1. Service Role Key Exposure (CRITICAL)
**Issue**: `VITE_SUPABASE_SERVICE_ROLE_KEY` was exposed in `.env.example`
**Risk**: Complete database compromise - service role keys bypass all RLS policies
**Fix**: Removed from client-side environment variables, marked as server-side only

### 2. XSS Vulnerability (HIGH)
**Issue**: `dangerouslySetInnerHTML` used without sanitization in NotificationWizardComplete.jsx
**Risk**: Malicious script injection through email content
**Fix**: Implemented HTML escaping for all user input before rendering

### 3. Environment Variable Security (HIGH)
**Issue**: Multiple sensitive secrets exposed in example file
**Risk**: Key exposure could lead to payment system compromise, data breaches
**Fix**: Moved all sensitive keys to server-side only with clear warnings

## 🔒 SECURITY IMPROVEMENTS IMPLEMENTED

### Production Build Security
- ✅ Console logs removed in production builds
- ✅ Enhanced CORS configuration with domain restrictions
- ✅ Added security headers (X-Frame-Options, X-XSS-Protection, etc.)

### Input Validation & Sanitization
- ✅ HTML escaping for user-generated content
- ✅ Secure password generation with proper randomness
- ✅ Environment variable validation utility

### Authentication & Authorization
- ✅ Admin access verification in edge functions
- ✅ Proper JWT token validation
- ✅ Role-based access control implementation

## 📋 ADDITIONAL SECURITY RECOMMENDATIONS

### Immediate Actions Required

1. **Environment Variables Setup**
```bash
# Move these to server-side environment (Vercel, Docker, etc.)
SUPABASE_SERVICE_ROLE_KEY=xxx
STRIPE_SECRET=xxx
PAYSTACK_SECRET=xxx
JWT_SECRET=xxx
ENCRYPTION_KEY=xxx
```

2. **Update CORS Origins**
- Replace `https://yourdomain.com` with actual domain in vite.config.mjs
- Add all subdomains and staging environments

3. **Content Security Policy (CSP)**
```javascript
// Add to index.html or server headers
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'
```

### Medium Priority

4. **Session Security Enhancement**
- Implement secure, HTTP-only cookies for session tokens
- Add session timeout and rotation
- Encrypt sensitive data in sessionStorage

5. **Rate Limiting**
- Implement API rate limiting in Supabase Edge Functions
- Add brute force protection for authentication endpoints
- Limit notification sending frequency

6. **Logging & Monitoring**
- Implement security event logging
- Set up alerts for suspicious activities
- Monitor authentication failures

### Long-term Security Improvements

7. **Dependency Security**
```bash
npm audit --audit-level=moderate
npm audit fix
```
- Regular dependency updates
- Use tools like Snyk or Dependabot

8. **Data Encryption**
- Encrypt sensitive data at rest in database
- Use field-level encryption for PII
- Implement key rotation policies

9. **Security Testing**
- Regular penetration testing
- Code security reviews
- Automated security scanning in CI/CD

## 🛡️ SECURITY BEST PRACTICES

### Environment Management
- ✅ Separate development and production environments
- ✅ Use environment-specific configurations
- ✅ Never commit sensitive data to version control

### Authentication Security
- ✅ Strong password policies
- ✅ Multi-factor authentication (MFA) for admin accounts
- ✅ Session management with proper timeout

### API Security
- ✅ Input validation and sanitization
- ✅ Rate limiting and throttling
- ✅ Proper error handling without information disclosure

### Database Security
- ✅ Row Level Security (RLS) policies
- ✅ Principle of least privilege
- ✅ Regular security audits of database access

## 📊 SECURITY CHECKLIST

### Before Production Deployment
- [ ] All sensitive keys moved to server-side
- [ ] CORS origins updated to actual domains
- [ ] Production build with console logs removed
- [ ] Security headers implemented
- [ ] SSL/TLS certificates configured
- [ ] Database backups and recovery tested
- [ ] Error monitoring setup (Sentry)
- [ ] Security audit completed

### Ongoing Security
- [ ] Regular dependency updates
- [ ] Security patches applied promptly
- [ ] Access reviews and audits
- [ ] Security training for team
- [ ] Incident response plan in place

## 🚨 SECURITY CONTACTS

For security issues or vulnerabilities:
- Email: security@yourdomain.com
- Responsible Disclosure Policy: [Link to policy]

## 📚 SECURITY RESOURCES

- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [Supabase Security Guide](https://supabase.com/docs/guides/security)
- [React Security Best Practices](https://snyk.io/blog/10-react-security-best-practices/)

---

**Last Updated**: $(date)
**Next Review**: $(date +30 days)
**Security Team**: [Your Security Team]
184 changes: 184 additions & 0 deletions SECURITY_POLICY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
# Security Policy & Guidelines

## 🔐 Security Policy Overview

This document outlines the security policies, guidelines, and best practices for the Basic Intelligence Community School application.

## 🚨 Critical Security Rules

### 1. Environment Variables
- **NEVER** expose service role keys to client-side code
- **ALWAYS** keep sensitive keys server-side only
- **USE** environment-specific configurations

### 2. Input Handling
- **ALWAYS** sanitize user input before rendering
- **NEVER** use `dangerouslySetInnerHTML` without proper sanitization
- **VALIDATE** all input on both client and server side

### 3. Authentication & Authorization
- **IMPLEMENT** proper role-based access control
- **VERIFY** admin access in all privileged operations
- **USE** secure session management

## 🛡️ Security Implementation Guidelines

### Client-Side Security

#### HTML Sanitization
```javascript
import { sanitizeHtml } from '../utils/security';

// ✅ Safe - uses sanitization utility
const safeContent = sanitizeHtml(userInput, { allowLineBreaks: true });

// ❌ Unsafe - direct HTML injection
<div dangerouslySetInnerHTML={{ __html: userInput }} />
```

#### Environment Variables
```javascript
// ✅ Safe - client-side only
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY;

// ❌ Dangerous - service role key on client
const serviceKey = import.meta.env.VITE_SUPABASE_SERVICE_ROLE_KEY;
```

### Server-Side Security

#### Edge Functions
```typescript
// ✅ Safe - admin verification
const { isAdmin, userId } = await verifyAdminAccess(authHeader);
if (!isAdmin) {
return new Response('Unauthorized', { status: 403 });
}

// ✅ Safe - use service role only on server
const supabaseAdmin = createClient(
Deno.env.get('SUPABASE_URL'),
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')
);
```

### Database Security

#### Row Level Security (RLS)
```sql
-- ✅ Safe - RLS policies enabled
CREATE POLICY "Users can view own profile" ON user_profiles
FOR SELECT USING (auth.uid() = id);

-- ✅ Safe - Admin bypass with proper checks
CREATE POLICY "Admins can view all profiles" ON user_profiles
FOR SELECT USING (
EXISTS (
SELECT 1 FROM user_profiles
WHERE id = auth.uid() AND role = 'admin'
)
);
```

## 📋 Security Checklist

### Development Phase
- [ ] All user inputs are validated and sanitized
- [ ] Environment variables are properly configured
- [ ] Authentication flows are secure
- [ ] Error messages don't leak sensitive information
- [ ] CORS policies are restrictive
- [ ] Security headers are implemented

### Production Deployment
- [ ] All sensitive keys are server-side only
- [ ] Console logs are removed from production builds
- [ ] SSL/TLS is properly configured
- [ ] Security headers are active
- [ ] Rate limiting is implemented
- [ ] Monitoring and logging are configured

### Ongoing Maintenance
- [ ] Regular dependency updates
- [ ] Security audit reviews
- [ ] Access control reviews
- [ ] Security training for team
- [ ] Incident response planning

## 🔍 Security Monitoring

### Key Metrics to Monitor
1. Authentication failures
2. Unauthorized access attempts
3. Unusual API usage patterns
4. Error rates in security-sensitive endpoints
5. Data access patterns

### Alert Thresholds
- > 5 failed login attempts per minute per IP
- > 10 unauthorized access attempts per hour
- Sudden spikes in API usage
- Database access outside business hours

## 🚨 Incident Response

### Security Incident Categories
1. **Critical**: Data breach, unauthorized admin access
2. **High**: Successful XSS attack, authentication bypass
3. **Medium**: Failed brute force attempts, suspicious API usage
4. **Low**: Information disclosure in error messages

### Response Procedures
1. **Immediate**: Block malicious IPs, revoke compromised tokens
2. **Short-term**: Patch vulnerabilities, audit affected systems
3. **Long-term**: Review security policies, implement additional controls

## 📚 Security Resources

### Required Reading
- [OWASP Top 10 Web Application Security Risks](https://owasp.org/www-project-top-ten/)
- [Supabase Security Documentation](https://supabase.com/docs/guides/security)
- [React Security Best Practices](https://snyk.io/blog/10-react-security-best-practices/)

### Tools & Services
- **Dependency Scanning**: `npm audit`, Snyk
- **Code Analysis**: ESLint security plugins, SonarQube
- **Monitoring**: Sentry error tracking, custom security logging
- **Testing**: OWASP ZAP, Burp Suite

## 🔄 Security Review Process

### Code Review Checklist
- [ ] Input validation is implemented
- [ ] Output encoding is used
- [ ] Authentication is properly verified
- [ ] Authorization checks are present
- [ ] Error handling is secure
- [ ] Logging is appropriate (not too verbose)

### Monthly Security Tasks
- [ ] Review and update dependencies
- [ ] Check for new security advisories
- [ ] Audit user access and permissions
- [ ] Review security monitoring logs
- [ ] Update security documentation

## 📞 Security Contacts

### Security Team
- **Security Lead**: [Email/Contact]
- **Development Team**: [Email/Contact]
- **Infrastructure Team**: [Email/Contact]

### Reporting Security Issues
- **Vulnerability Disclosure**: security@yourdomain.com
- **Emergency Security Issues**: emergency@yourdomain.com
- **General Security Questions**: security@yourdomain.com

---

**Document Version**: 1.0
**Last Updated**: $(date)
**Next Review**: $(date +30 days)
**Approved By**: Security Team Lead
Loading