Django开发与攻防测试(入门篇)
字数 1042 2025-08-18 11:37:23

Django开发与攻防测试(入门篇)教学文档

一、Django基础开发

1. 环境搭建与项目创建

# 下载指定版本Django
pip install django==1.8.2 -i https://pypi.mirrors.ustc.edu.cn/simple/

# 创建虚拟环境
virtualenv django_demo
cd django_demo
source bin/activate

# 创建项目目录结构
mkdir learn_django
cd learn_django

# 创建Django项目
python django-admin.py startproject django_web

# 创建应用
python manage.py startapp django_app

2. Django架构模式

Django采用MTV模式(Model-Template-View),与传统的MVC模式对应关系如下:

  • Model(模型) - 数据存取层
  • Template(模板) - 表现层
  • View(视图) - 业务逻辑层

3. 静态Web开发

模板层

在项目根目录创建templates文件夹,添加index.html

<!DOCTYPE html>
<html>
<head>
    <title>Django Learning</title>
</head>
<body>
    <h1>Hellow,Django!</h1>
</body>
</html>

视图层

django_app/views.py中添加视图函数:

from django.shortcuts import render

def index(request):
    return render(request,'index.html')

URL路由

django_web/urls.py中配置路由:

from django.conf.urls import include, url
from django.contrib import admin
from django_app.views import index

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^index/', index),
]

4. 动态Web开发

数据库配置

修改settings.py中的数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_db_name',
        'USER': 'your_db_user',
        'PASSWORD': 'your_db_password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

模型层

django_app/models.py中定义模型:

from django.db import models

class DjangoTest(models.Model):
    text = models.CharField(max_length=20)

数据库迁移

python manage.py makemigrations
python manage.py migrate

管理员界面

创建超级用户:

python manage.py createsuperuser

注册模型到admin:

from django.contrib import admin
from .models import DjangoTest

admin.site.register(DjangoTest)

动态视图

带参数的视图函数:

def index(request, id):
    text = DjangoTest.objects.all()
    iden = int(id)
    context = {'text': text[iden]}
    return render(request, 'index.html', context)

动态模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Django test</title>
</head>
<body>
    <h1>ID: {{ text.id }}</h1>
    <h1>Hello:{{ text.text }}</h1>
</body>
</html>

二、Django安全攻防

1. 格式化字符串漏洞

漏洞代码

template = 'Hello {user}! , You can set your email is:' + request.POST.get('email')
return render(request, 'index.html', {"value": template.format(user=request.user)})

攻击方式

通过构造email参数为{user.password}可以获取用户密码哈希值

修复方案

  • 避免直接拼接用户输入到格式化字符串
  • 使用模板系统分离数据和展示

2. XSS漏洞

漏洞代码

info = request.POST.get('info')
return render(request,'index.html',{"value":info})

Django的XSS防护机制

  • 默认开启自动转义(escape)
  • 可通过safe过滤器关闭转义
  • 可通过autoescape标签控制转义

危险用法

{{ value | safe }}

修复方案

import cgi

info = request.POST.get('info')
info = cgi.escape(info)
return render(request,'index.html',{"value":info})

3. SQL注入漏洞

危险查询方式

id = request.POST.get('id')
tag = dj.objects.extra(where={'id={}'.format(id)})[0].text

攻击方式

构造id参数为1 or 1=1等恶意SQL片段

修复方案

使用参数化查询:

tag = dj.objects.extra(where=['id=%s'], params=[id])

4. 其他安全建议

  1. 始终使用Django内置的ORM进行数据库操作
  2. 避免直接使用eval()exec()执行用户输入
  3. 使用Django的CSRF保护机制
  4. 定期更新Django版本以获取安全补丁
  5. 使用@login_required装饰器保护敏感视图
  6. 配置适当的权限系统

三、开发实践建议

  1. 项目结构规划

    • 合理划分应用模块
    • 使用虚拟环境隔离依赖
    • 遵循PEP8编码规范
  2. 调试技巧

    • 使用print(queryset.query)查看生成的SQL
    • 利用Django shell进行快速测试
    • 配置日志记录系统
  3. 性能优化

    • 使用select_relatedprefetch_related减少查询次数
    • 合理使用缓存
    • 优化模板渲染
  4. 测试策略

    • 编写单元测试
    • 进行安全扫描
    • 压力测试关键接口
Django开发与攻防测试(入门篇)教学文档 一、Django基础开发 1. 环境搭建与项目创建 2. Django架构模式 Django采用MTV模式(Model-Template-View),与传统的MVC模式对应关系如下: Model(模型) - 数据存取层 Template(模板) - 表现层 View(视图) - 业务逻辑层 3. 静态Web开发 模板层 在项目根目录创建 templates 文件夹,添加 index.html : 视图层 在 django_app/views.py 中添加视图函数: URL路由 在 django_web/urls.py 中配置路由: 4. 动态Web开发 数据库配置 修改 settings.py 中的数据库配置: 模型层 在 django_app/models.py 中定义模型: 数据库迁移 管理员界面 创建超级用户: 注册模型到admin: 动态视图 带参数的视图函数: 动态模板 二、Django安全攻防 1. 格式化字符串漏洞 漏洞代码 攻击方式 通过构造 email 参数为 {user.password} 可以获取用户密码哈希值 修复方案 避免直接拼接用户输入到格式化字符串 使用模板系统分离数据和展示 2. XSS漏洞 漏洞代码 Django的XSS防护机制 默认开启自动转义(escape) 可通过 safe 过滤器关闭转义 可通过 autoescape 标签控制转义 危险用法 修复方案 3. SQL注入漏洞 危险查询方式 攻击方式 构造 id 参数为 1 or 1=1 等恶意SQL片段 修复方案 使用参数化查询: 4. 其他安全建议 始终使用Django内置的ORM进行数据库操作 避免直接使用 eval() 或 exec() 执行用户输入 使用Django的CSRF保护机制 定期更新Django版本以获取安全补丁 使用 @login_required 装饰器保护敏感视图 配置适当的权限系统 三、开发实践建议 项目结构规划 合理划分应用模块 使用虚拟环境隔离依赖 遵循PEP8编码规范 调试技巧 使用 print(queryset.query) 查看生成的SQL 利用Django shell进行快速测试 配置日志记录系统 性能优化 使用 select_related 和 prefetch_related 减少查询次数 合理使用缓存 优化模板渲染 测试策略 编写单元测试 进行安全扫描 压力测试关键接口