Django安全最佳实践
保护Django应用免受常见Web攻击,如XSS、CSRF、SQL注入。 · 难度:入门 · +15XP
安全威胁与防御
Django内置了许多安全机制,但开发者仍需注意正确配置和使用。
1. 跨站脚本攻击(XSS)
Django模板自动转义变量中的HTML标签,使用|safe过滤器时要谨慎。
<!-- 安全:自动转义 -->
{{ user_input }}
<!-- 危险:手动标记为安全 -->
{{ user_input|safe }}2. 跨站请求伪造(CSRF)
所有POST表单必须包含{% csrf_token %}标签。Django默认启用CSRF中间件。
<form method="post">
{% csrf_token %}
<button type="submit">提交</button>
</form>3. SQL注入
使用ORM的查询集方法(如filter、get)自动参数化查询,避免使用raw()或直接拼接SQL。
# 安全
User.objects.filter(username='admin')
# 危险:不要这样做
User.objects.raw(f"SELECT * FROM auth_user WHERE username = '{username}'")4. 安全配置
| 设置 | 说明 |
|---|---|
| SECURE_SSL_REDIRECT | 强制HTTPS |
| SECURE_HSTS_SECONDS | HSTS头 |
| SESSION_COOKIE_SECURE | 仅HTTPS传输Cookie |
| X_FRAME_OPTIONS | 防止点击劫持 |
练习提示: 检查starter_code中的视图,找出安全漏洞并修复。特别关注用户输入输出处理。