Back to Blog
Security 7 min read

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.