Z Image API Security Best Practices
Learn how to secure your Z Image API implementation. API key management, rate limiting, and data privacy.
1. API Key Security Management
Never hardcode API keys in your code. Use environment variables:
# ? Wrong approach
api = ZImageAPI(api_key="sk-1234567890abcdef")
# ? Correct approach
import os
from dotenv import load_dotenv
load_dotenv()
api = ZImageAPI(api_key=os.getenv("ZIMAGE_API_KEY"))
Create a .env file (remember to add to .gitignore):
ZIMAGE_API_KEY=your_actual_api_key_here
2. Key Rotation Strategy
Regularly rotate API keys to reduce exposure risk:
class APIKeyManager:
def __init__(self):
self.primary_key = os.getenv("ZIMAGE_PRIMARY_KEY")
self.backup_key = os.getenv("ZIMAGE_BACKUP_KEY")
self.current_key = self.primary_key
def rotate_key(self):
"""Switch to backup key"""
self.current_key = self.backup_key
logger.info("Switched to backup API key")
def get_api(self):
return ZImageAPI(api_key=self.current_key)
3. Implement Rate Limiting
Protect your application from abuse:
from flask import Flask, request, jsonify
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
app = Flask(__name__)
limiter = Limiter(
app=app,
key_func=get_remote_address,
default_limits=["100 per day", "10 per hour"]
)
@app.route('/generate')
@limiter.limit("5 per minute")
def generate_image():
prompt = request.args.get('prompt')
result = api.generate(prompt)
return jsonify({"status": "success"})
4. Input Validation and Filtering
Validate user input to prevent malicious content:
import re
def validate_prompt(prompt):
"""Validate and sanitize user input"""
# Length limit
if len(prompt) > 500:
raise ValueError("Prompt too long")
# Blacklist keywords
blacklist = ["spam", "abuse", "illegal"]
for word in blacklist:
if word.lower() in prompt.lower():
raise ValueError("Contains disallowed content")
# Remove special characters
prompt = re.sub(r'[^\w\s,.]', '', prompt)
return prompt.strip()
# Usage example
try:
safe_prompt = validate_prompt(user_input)
result = api.generate(safe_prompt)
except ValueError as e:
print(f"Validation failed: {e}")
5. User Authentication and Authorization
Add authentication to your API endpoints:
from functools import wraps
from flask import request, abort
def require_api_key(f):
@wraps(f)
def decorated_function(*args, **kwargs):
api_key = request.headers.get('X-API-Key')
if not api_key or not verify_api_key(api_key):
abort(401)
return f(*args, **kwargs)
return decorated_function
@app.route('/generate')
@require_api_key
def generate_image():
# Your code here
pass
6. Audit Logging
Log all API calls for tracking:
import logging
from datetime import datetime
class AuditLogger:
def __init__(self):
self.logger = logging.getLogger('audit')
handler = logging.FileHandler('audit.log')
self.logger.addHandler(handler)
def log_request(self, user_id, prompt, ip_address):
self.logger.info({
'timestamp': datetime.now().isoformat(),
'user_id': user_id,
'prompt': prompt[:100], # Only log first 100 chars
'ip': ip_address
})
?? Security Alert
If you suspect your API key has been compromised, immediately revoke it in your dashboard and generate a new one.
Security Checklist
- ? API keys removed from code
- ? Using HTTPS for encrypted transmission
- ? Rate limiting implemented
- ? Input validation in place
- ? Audit logging configured
- ? Regular API key rotation
Conclusion
Security is an ongoing process, not a one-time task. By following these best practices, your Z Image API integration will be more secure and reliable. Remember: security investment is always worthwhile.