文章目录
- 6 HTTP配置
- 7 会话配置
- 8 认证和授权配置
- 9 安全配置
- 9.1 XFrameOptionsMiddleware提供的点击劫持保护配置
- 9.2 SecurityMiddleware提供的安全配置
- 9.3 CSRF保护配置
创建django项目后,会自动生成初始的项目文件如下:
manage.py # 管理django项目的命令行工具
django_pro/ # 项目的python包
__init__.py # 表示当前文件夹是一个python包
settings.py # 项目的配置文件
urls.py # 项目的URL声明
asgi.py # 项目运行在兼容ASGI的web服务器上的入口
wsgi.py # 项目运行在兼容WSGI的web服务器上的入口
settings.py
文件包含了项目的基础配置。以下是HTTP、会话、认证和安全相关的配置参数。
settings.py
可选的全部配置见:django配置
6 HTTP配置
-
DATA_UPLOAD_MAX_MEMORY_SIZE
请求体的最大字节数。默认2.5MB。超过会引发异常。 -
DATA_UPLOAD_MAX_NUMBER_FIELDS
通过GET或POST接收的参数的最大数量。默认为1000,超过会引发异常。 -
DATA_UPLOAD_MAX_NUMBER_FILES
通过POST接收的最大文件数。默认100。 -
DEFAULT_CHARSET
未手动指定MIME类型时,HttpResponse使用的默认字符集。默认为'utf-8'
。 -
DISALLOWED_USER_AGENTS
正则表达式对象列表,表示不允许访问任何页面的User-Agent
字符串。 -
FORCE_SCRIPT_NAME
HTTP请求中“SCRIPT_NAME”环境变量的值。默认为None。 -
SIGNING_BACKEND
用于签署cookie和其他数据的后端。默认'django.core.signing.TimestampSigner'
。 -
USE_X_FORWARDED_HOST
是否使用X-Forwarded-Host
头,默认False。仅在使用设置该头的代理时才启用。 -
USE_X_FORWARDED_PORT
是否使用X-Forwarded-Port
头,默认False。仅在使用设置该头的代理时才启用。 -
WSGI_APPLICATION
django内置服务器如runserver
将使用的WSGI应用对象的完整Python路径。
默认为None,使用由django.core.wsgi.get_wsgi_application()
获取的值。
7 会话配置
-
SESSION_COOKIE_SECURE
是否仅通过HTTPS传输会话Cookie。默认False。 -
SESSION_COOKIE_AGE
会话cookie的寿命,默认1209600秒,2周。 -
SESSION_COOKIE_DOMAIN
用于会话cookie的域。 -
SESSION_COOKIE_HTTPONLY
是否对会话cookie使用HttpOnly标志。默认为True,客户端的JS无法访问会话cookie。 -
SESSION_COOKIE_NAME
用于会话的cookie名称。 -
SESSION_COOKIE_PATH
会话cookie上设置的路径。该配置适合在同主机多项目时分隔各自的会话。 -
SESSION_COOKIE_SAMESITE
会话cookie上的SameSite
值。这个标志可以防止cookie在跨站请求中被发送。 -
SESSION_EXPIRE_AT_BROWSER_CLOSE
是否在用户关闭浏览器时结束会话。默认False。 -
SESSION_SAVE_EVERY_REQUEST
是否在每次请求时保存会话数据。默认False,只有被修改时才保存会话。 -
SESSION_SERIALIZER
会话数据的序列化器的完整导入路径。
默认值:'django.contrib.sessions.serializers.JSONSerializer'
-
SESSION_ENGINE
会话引擎。控制会话数据的存储位置。
可选值:django.contrib.sessions.backends.db
会话存储于数据库中django.contrib.sessions.backends.file
会话存储在文件django.contrib.sessions.backends.cache
基于缓存的会话django.contrib.sessions.backends.cached_db
先从缓存读取会话,如果没有就从数据库读取django.contrib.sessions.backends.signed_cookies
会话基于cookie
-
SESSION_CACHE_ALIAS
使用基于缓存的会话时,选择需要使用的缓存。默认'default'
。 -
SESSION_FILE_PATH
在会话存储在文件时,指定会话存储的目录。
8 认证和授权配置
-
AUTHENTICATION_BACKENDS
认证用户时,使用的认证后端类的列表。AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend']
-
LOGIN_URL
在使用login_required()
装饰器、LoginRequiredMixin
、AccessMixin
或安装LoginRequiredMiddleware
时,请求重定向到登录的URL。
默认'/accounts/profile/'
。 -
LOGIN_REDIRECT_URL
登录后请求被重定向的URL。 -
LOGOUT_REDIRECT_URL
注销后的重定向URL。 -
AUTH_USER_MODEL
用来表示用户的模型。 -
PASSWORD_RESET_TIMEOUT
密码重置链接的有效秒数。默认259200秒,3天。 -
PASSWORD_HASHERS
存储密码时使用的哈希算法列表。 -
AUTH_PASSWORD_VALIDATORS
用于检查用户密码强度的验证器列表。
9 安全配置
SECRET_KEY
用于提供加密签名的密钥,需要保密。
django项目在创建时会自动创建一个随机生成的密钥。
它会被用于会话、消息、密码的加密。SECRET_KEY_FALLBACKS
回退密钥列表。
9.1 XFrameOptionsMiddleware提供的点击劫持保护配置
点击劫持指恶意网站在自身页面上隐藏另一个网站的元素欺骗用户点击的行为。
X_FRAME_OPTIONS
XFrameOptionsMiddleware
中间件使用的X-Frame-Options
的默认值。默认为'DENY'
。X_FRAME_OPTIONS = "SAMEORIGIN"
9.2 SecurityMiddleware提供的安全配置
-
SECURE_CONTENT_TYPE_NOSNIFF
默认False,启用时SecurityMiddleware
中间件会在所有响应设置X-Content-Type-Options: nosniff
头。 -
SECURE_CROSS_ORIGIN_OPENER_POLICY
默认'same-origin'
,SecurityMiddleware
中间件会在响应上设置Cross-Origin-Opener-Policy
头。
一些浏览器可以根据这个头防止跨源攻击。 -
SECURE_HSTS_INCLUDE_SUBDOMAINS
SecurityMiddleware
中间件会在HTTP的Strict-Transport-Security
头添加includeSubDomins
指令。
该指令会使浏览器拒绝通过不安全的连接连接到你的子域。 -
SECURE_HSTS_PRELOAD
启用时SecurityMiddleware
中间件会在HTTP的Strict-Transport-Security
头添加preload
指令。 -
SECURE_HSTS_SECONDS
默认为0。设置为非0整数时,SECURE_HSTS_PRELOAD
和SECURE_HSTS_INCLUDE_SUBDOMAINS
配置才会生效。 -
SECURE_REFERRER_POLICY
SecurityMiddleware
中间件会在响应上设置:ref:
头。 -
SECURE_REDIRECT_EXEMPT
默认为空列表。可以使用正则表达式指定不会被重定向到HTTPS的请求。 -
SECURE_SSL_REDIRECT
是否将所有HTTP请求重定向时转为HTTPS。默认False。 -
SECURE_SSL_HOST
指定SSL重定向指向的主机。 -
SECURE_PROXY_SSL_HEADER
格式为包含HTTP头部字段和值的元组。可以控制请求对象的is_secure()
方法的行为。is_secure()
默认会通过请求的url是否包含https://
来判断请求是否安全。
当django应用处于代理服务器后面时,原始请求即使用了HTTPS,代理使用非HTTPS连接时,is_secure()
就会返回False。原始请求使用非HTTP连接时,代理用了HTTPS,is_secure()
就返回True。
可以设置一个自定义的头来标记原始请求是否是通过HTTPS进来的,然后设置SECURE_PROXY_SSL_HEADER
参数。# 来自代理的请求的X-Forwarded-Proto头值为https、 # 或协议列表的最左侧的值为https时,就认为是安全的 SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
9.3 CSRF保护配置
CSRF_COOKIE_SECURE
是否仅通过HTTPS传输CSRF cookie。CSRF_COOKIE_DOMAIN
设置CSRF cookie时使用的域。
用于把跨子域请求排除在跨站请求伪造保护之外。CSRF_COOKIE_AGE
CSRF cookie的寿命。默认值3144960秒,约1年。
过期时间长是为了避免用户从浏览器缓存中加载数据时出现问题。
设置为None时,会使用基于会话的CSRF cookie。这时cookie存在内存中而不是持久性存储。CSRF_COOKIE_HTTPONLY
是否对CSRF cookie使用HttpOnly标志。
默认False。启用时客户端的JS无法访问CSRF cookie。CSRF_COOKIE_NAME
用于CSRF认证令牌的cookie的名称。默认值'csrftoken'
。CSRF_COOKIE_PATH
在CSRF cookie上设置的路径。默认值'/'
。
如果多个django项目在同一个机器上启动时,这个设置可以使每个项目只能看到自己的CSRF cookie。CSRF_COOKIE_SAMESITE
CSRF cookie上SameSite标志的值。可用来防止在跨站请求中发送cookie。CSRF_FAILURE_VIEW
请求被CSRF保护拒绝时,使用的视图的点分隔路径。CSRF_HEADER_NAME
用于CSRF认证的请求头的名称。默认'HTTP_X_CSRFTOKEN'
。CSRF_TRUSTED_ORIGINS
允许CSRF信任的来源。CSRF_USE_SESSIONS
启用时会把CSRF令牌存储在用户会话,而不是cookie中。默认False。