Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

栏目: Python · 发布时间: 6年前

内容简介:Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

0x00 前言

最近在搞站的时候遇到过一些基于Django开发的Web项目,黑盒挖出来了一些漏洞。恰好之前在学校的时候也拿Django写过一些东西,but由于挺长时间没动过也忘得差不多了,于是整理一份笔记。一来是对Django开发基础的回顾,顺手写点小项目啥的,二来就其可能产生的安全问题以及如何避免做一些总结。

为了方便还原漏洞现场,做复盘,我会将详细的环境及操作步骤记录在文中,可能会有些冗余,但一定会足够详细。希望同样在学习这方面知识的同学,偶然看到了这篇文章,能有所收获。当然,如有谬误,还请不吝赐教。

其实像Django这类『现代Web框架(Web Framework)』,通过URL路由将用户请求分发至指定的视图函数(View function)去处理,不直接的对文件进行操作,已经不能像搞 PHP 的站点一样,通过利用文件上传漏洞很轻松的getshell。以及其自有的ORM框架,想写出 SQL 注入漏洞还是挺费劲的(但并不是没有了,Django框架仍然支持原生的SQL语句)。Django框架其自有的CSRF中间件(CSRF middleware)和模板标签(template tag)又极大的避免了POST型的CSRF问题。

既然Django已经足够“安全”了,那当我们真的遇到这类站点就真的束手无策了么?其实不然,在真实的生产环境中我就遇到过这些安全问题:

1、逻辑漏洞(越权、逻辑混乱、设计不合理导致的验证码绕过等业务逻辑层面的漏洞)

2、GET型CSRF漏洞

3、SQL注入漏洞

4、DEBUG模式未关闭导致的敏感信息泄露

5、条件竞争漏洞

之后我又做了一些功课,在特定的场景下,基于Django开发的应用还开可能存在这些问题:

1、XSS

2、文件上传覆盖指定文件getshell(上传路径可控、指定目录具有写权限、Web服务需重启)

3、框架本身的安全问题(0day、低版本漏洞)

4、命令、代码执行(敏感的命令、代码执行函数,反序列化漏洞)

0x01 基础环境

Windows 7 SP1

Python 3.6.3

Django 2.0

Pycharm 2017.3.2(Professional Edition)

Notepad++ v7.5.2

0x02 说一说Django的MTV设计模式

Django采用了MTV设计模式,即Model(模型)、Template(模板)、View(视图)。类比MVC,其实它俩除了名字不一样,本质上没有任何区别。 Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

参考官方文档,MTV分别承担的角色如下,

Model(模型):

Django provides an abstraction layer (the “models”) for structuring and manipulating the data of your Web application.

Model(模型)层是Django提供的抽象层,其构建、操作Web应用的数据。即负责业务对象和数据库表段、字段的关系映射(ORM)。

Template(模板):

The template layer provides a designer-friendly syntax for rendering the information to be presented to the user.

Template(模板)层提供了设计友好的语法渲染信息以呈现给用户。即结合静态的资源文件(HTML)渲染数据并响应内容到客户端浏览器。

View(视图):

Django has the concept of “views” to encapsulate the logic responsible for processing a user’s request and for returning the response.

View(视图)层主要写内容为业务逻辑,处理用户的请求,经过业务逻辑后,再将处理后的结果返回。

整体的执行流程如下:

Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

1、URL路由:用户通过浏览器向服务端发起请求

2、View:业务逻辑。通过URL路由分发到指定的视图函数(View function)处理用户请求

3、Model:若需要数据库操作则View层的View function去Model层(通过ORM建立数据库表、字段与 Python 对象的对应关系)中取数据,并将数据返回至View function。简单来讲就是处理数据库相关操作(增删改查等)。

4、Template:渲染数据。经过View层的处理,将需要返回给客户端的处理结果(数据)发给Template层,经过Template(模板)渲染后,将HTML字符串响应至客户端。

至此就是一个简单的MTV设计模式执行流程。

0x03 Django的安装初始化及Hello World!

『Talk is cheap,show me the code.』吹牛逼没啥意思,说了那么多理论,还是先动动手吧。我比较喜欢的学习方式是,先搭个demo体会下,再学习原理,再思考其可能产生的安全问题。

这篇文章主要先说下Django的安装及初始化,结合Demo说一下MTV设计模式。再之后的文章中就其可能产生的安全问题,结合实例,step by step的进行记录。

一、Django的安装及初始化

使用pip3 install django命令下载Django。

Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

如图所示,已成功安装Django。

Django的安装目录在C:\Python36\Lib\site-packages\django中

Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

同时其还在C:\Python36\Scripts目录下安装了两个文件django-admin.exe、 django-admin.py ,方便创建基于Django的Web『项目』及『应用』。

使用 django-admin startproject VulShow 命令创建一个名为VulShow的『项目』。其相应的目录结构如下:

Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

各个文件分别承担的功能为:

manage.py 程序启动文件、与Django交互的命令文件(如创建『应用』,初始化数据库等操作)

settings.py 项目配置文件

urls.py URL路由,用于将用户请求分发到不同『应用』的不同视图函数中

wsgi.py 封装socket接口

二、构建第一个基于Django的Web应用

使用python3 manage.py startapp vulnum命令创建一个名为vulnum的『应用』。

Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

没有报错说明创建成功。

写两行代码先来感受下,主要实现1个简单的功能显示当前时间。

创建一个最简单的视图函数用来显示当前时间。

Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

定义URL路由,将/showtime/请求分发至show_time()视图函数进行处理。

Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

启动项目观察结果。

Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

Django框架在Web开发中的应用及可能产生的安全问题汇总(一)

这里我仅展示下从URL路由的定义,到视图函数的简单写法。由于时间也不早了,实用的功能之后我在写,回家睡觉。

0x04 后记

本文主要记录了下Django的安装及初始化、如何通过Django构建Web应用以及Django采用的MTV设计模式。

在之后的文章中将会结合实际项目的开发就其可能产生的安全问题做分析及复盘。同时将安全贯穿到完整的项目开发流程中(SDL),尽可能的在开发环节减少安全问题的产生。

0x05 参考链接

General | Django documentation | Django

Django MTV模式详解 – CSDN博客

从Pwnhub诞生聊Django安全编码

安全客 – 有思想的安全新媒体

Cross Site Request Forgery protection

The Web framework for perfectionists with deadlines

作者: 童话


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++沉思录

C++沉思录

Andrew Koenig、Barbara Moo / 黄晓春、孟岩(审校) / 人民邮电出版社 / 2002-11-01 / 50.00元

《C++ 沉思录》集中反映了C++的关键思想和编程技术,不仅告诉你如何编程,还告诉你为什么要这样编程。本书曾出现在众多的C++专家推荐书目中。 这将是C++程序员的必读之作。因为: 它包含了丰富的C++思想和技术,从详细的代码实例总结出程序设计的原则和方法。 不仅教你如何遵循规则,还教你如何思考C++编程。 既包括面向对象编程也包括泛型编程。 探究STL这一近年来C++最重要的新成果的内在思想。一起来看看 《C++沉思录》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具