Django模板[CSRF]

  • CSRF
  • 防csrf的使用
  • 取消csrf保护
  • 保护原理

CSRF

  • 全称Cross Site Request Forgery,跨站请求伪造
  • 某些恶意网站上包含链接、表单按钮或者JavaScript,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作,这就是跨站攻击
  • 演示csrf如下
  • 创建视图csrf1用于展示表单,csrf2用于接收post请求
from django.shortcuts import render
# Create your views here.
def csrf1(request):
    return render(request, 'csrf1.html')
def csrf2(request):
    uname = request.POST['uname']
return render(request, 'csrf2.html', {'uname': uname})
  • 配置URL
url(r'^csrf1/$', views.csrf1, name='csrf1'),
url(r'^csrf2/$', views.csrf2, name='csrf2')
  • 创建模板csrf1.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post" action="{% url 'csrf2' %}">
    <input name="uname"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>
  • 创建csrf2.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{ uname }}
</body>
</html>

在浏览器中访问,查看效果,报错 403

将settings.py中的中间件代码 'django.middleware.scrf.CsrfViewMiddleware' 注释



防csrf的使用

  • 在django的模板中,提供了防止跨站攻击的方法,使用步骤如下:
  • step1:

在settings.py中启用'django.middleware.csrf.CsrfViewMiddleware'中间件,此项在创建项目时,默认被启用

  • step2:

在csrf1.html中添加标签

  • <form>
        {% csrf_token %}
        ...
    </form>
    

取消csrf保护

  • 如果某些视图不需要保护,可以使用装饰器csrf_exempt,模板中也不需要写标签,修改csrf2的视图如下
....
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def csrf2(request):
    uname = request.POST['uname']
    return render(request, 'csrf2.html', {'uname': uname})

保护原理

  • 加入标签,可以查看源代码,发现多了如下代码

<input type='hidden' name='csrfmiddlewaretoken' value='nGjAB3Md9ZSb4NmG1sXDolPmh3bR2g59' />

  • 在浏览器的调试工具中,通过network标签可以查看cookie信息
  • 本站中自动添加了cookie信息
  • 查看跨站的信息,并没有cookie信息,即使加入上面的隐藏域代码,发现又可以访问了
  • 结论:django的csrf不是完全的安全
  • 当提交请求时,中间件'django.middleware.csrf.CsrfViewMiddleware'会对提交的cookie及隐藏域的内容进行验证,如果失败则返回403错误
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文是 Django 官网文档的翻译。官网链接:https://docs.djangoproject.com/en...
    学以致用123阅读 5,949评论 0 5
  • Web框架之Django: (1)简介: Django是一个由Python写成开源的重量级Web应用框架,采用MT...
    老肖阅读 3,184评论 0 18
  • 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚...
    riverstation阅读 2,271评论 0 8
  • 一、Django框架前言知识: 1、C/S和B/S的区别: C/S结构软件:客户端/服务端软件,即客户端要自己下载...
    月下独酌123阅读 5,232评论 0 36
  • 辅导孩子作业的八项注意 作者:贾明娟 昨天跟我二姐聊起来辅导孩子作业的事情,觉得城市乡村,国内国外,其实大家面临的...
    七彩霞衣阅读 966评论 0 0

友情链接更多精彩内容