# Django пример (встроенная защита)
# В settings.py
MIDDLEWARE = [
...
'django.middleware.csrf.CsrfViewMiddleware',
]
# В шаблоне
<form method="post">
{% csrf_token %}
...
</form>
# Для API в Django REST Framework
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def secure_view(request):
# DRF автоматически проверяет CSRF для аутентифицированных сессий
return Response({"message": "Защищённый эндпоинт"})
# Пример настройки CORS в Django
INSTALLED_APPS = [
...
'corsheaders',
]
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
]
CORS_ALLOWED_ORIGINS = [
"https://trusted-domain.com",
]
# В settings.py Django
SESSION_COOKIE_SAMESITE = 'Strict' # или 'Lax'
CSRF_COOKIE_SAMESITE = 'Strict'
# НЕПРАВИЛЬНО (уязвимый код)
from django.db import connection
def get_user_unsafe(username):
with connection.cursor() as cursor:
cursor.execute(f"SELECT * FROM users WHERE username = '{username}'")
return cursor.fetchall()
# ПРАВИЛЬНО (использование ORM)
from django.contrib.auth.models import User
def get_user_safe(username):
return User.objects.filter(username=username)
# Безопасный пример с параметризацией
from django.db import connection
def get_user_safe(username):
with connection.cursor() as cursor:
cursor.execute("SELECT * FROM users WHERE username = %s", [username])
return cursor.fetchall()
from django.core.exceptions import ValidationError
from django.utils.html import escape
def clean_input(input_str):
if not input_str.isalnum(): # Проверка на алфавитно-цифровые символы
raise ValidationError("Недопустимые символы в строке")
return escape(input_str) # Экранирование специальных символов
# В settings.py Django
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'USER': 'app_user', # Специальный пользователь с минимальными правами
'PASSWORD': 'securepassword',
'NAME': 'app_db',
'OPTIONS': {
'options': '-c statement_timeout=1000' # Таймаут запросов
}
}
}
# Django Security Middleware
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
X_FRAME_OPTIONS = 'DENY'
# DRF Throttling
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
],
'DEFAULT_THROTTLE_RATES': {
'anon': '100/day',
'user': '1000/day'
}
}
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['username', 'email']
extra_kwargs = {
'username': {
'min_length': 4,
'max_length': 32,
'validators': [RegexValidator(r'^[a-zA-Z0-9_]+$')]
}
}
Для защиты от CSRF:
Для защиты от SQL-инъекций:
Общие рекомендации:
Правильная комбинация этих мер значительно повысит безопасность вашего API.