Django学习-默认支持的中间件

1.缓存中间件

    路径:

        1.django.middleware.cache.UpadateCacheMiddleware

        2.django.middleware.cache.FetchFromCacheMiddleware

    作用:

        缓存站点范围内的内容,如果设置了这些缓存中间件,Django将会把这些缓存内容保存至CACHE_MIDDLEWARE_SECONDS定义的路径中

2.通用中间件

    路径:

        django.middleware.common.CommonMiddleware

    作用:

        1.禁止settiongs.py中DISALLOWED_USER_AGENTS列表中所设置的user agent访问,这个属性的设置应该是正则表达式格式的对象(已编译的,就是re.compile()返回值)组成的列表,这些对象用于匹配传入的request请求头中的user-agent域,如下:

import re

DISALLOWED_USER_AGENTS = (
    re.compile(r'^OmniExplorer_Bot'),
    re.compile(r'^Googlebot')
)

        2.根据settiongs配置文件中的APPEND_SLASH(添加末尾斜杠)和PREPEND_WWW(添加www开头)设置执行URL重写.这是为了规范化URL,每个URL都应该有特定的含义,

            APPEND_SLASH设置为True时,若request的URL没有末尾斜杠,则会重定向至末尾斜杠。但是,如果是带点号的,则不会重定向。

            PREPEND_WWW设置为True时,若request的URL缺失了开头的www,则会重定向至开头包含www的URL。

        3.基于settings配置文件中的USE_ETAGS属性设置来表名是否启用基于缓存的优化机制。如果USE_ETAGS属性设置为True,则Django将会为每个request的页面上下文content计算其MD5码。如果当前返回的响应在已缓存中有相同即没有发生修改的,则会返回已缓存的响应。

         4.通用中间件中的response_redirect_class类,默认是HttrResponsePermanentRedirect,可以通过继承通用中间件并重写该类来自定义由中间发出的重定向

          5.还有一个中间件是django.middleware.common.BrokenLinkEmailsMiddleware,该中间件向settings配置文件中设置的对应邮件接收者,管理者发送连接中断时的email。

3.GZip中间件

    路径:

        django.middleware.gzip.GZipMiddleware

    警告:

        安全研究人员发现当一个网站使用了压缩技术后,包括使用GZip中间件,会使网站暴露在一些可能的范围下。可以通过一些方法来进行平衡妥协,比如使用Django的CSRF保护。但是在你的网站上使用Gzip中间件之前,你必须考虑清楚,无论你是否会受制于这些可能的攻击。如果你有任何不清楚你是否会被攻击的时候,你不应该使用Gzip中间件。

    作用:

        可以将内容进行压缩后返回浏览器,需要将该中间件布置在任何需要读取以及写入响应的中间件之前。但是以下几种情况,压缩中间件将不会对content进行压缩

        1.content的body部分少于200bytes。

        2.返回的响应头部信息中设置了Content-Encoding属性

        3.浏览器发出的请求头部信息中关于Accept-Encoding设置属性,没有包含gzip属性。

        可以通过使用gzip_page()的装饰函数对单个视图进行装饰,这样就可以在这个视图函数中来使用通过GZip方式压缩的数据了。

4.条件获取中间件

    路径:

        django.middleware.http.ConditionalGetMiddleware

    作用:

        这个中间件对根据条件处理GET操作提供支持,如果返回的response的头部信息中包含了Last_Modified以及ETag信息,并且在请求的request头部信息中包含了If-None-Match信息以及If-Modified-Since信息,并且response和request信息一致,则返回的response将会被取代为HttpResponseNotModified。同时还会在response的头部信息中设置Date以及Content-Length信息。

5.本地中间件

    路径:

        django.middleware.locale.LocaleMiddleware

    作用:

        国际化,可以基于请求的request数据选择不同的语言。它可以为每个用户定制相应内容。

        默认提供的本地中间件中有一个response_redirect_class默认是HttpResponseRedirect对象,可以通过继承本地中间件,并重写该类来自定义由中间件控制的重定向。

6.消息中间件Message Middleware

    路径:

        django.contrib.messages.middleware.MessageMiddleware

    用法:

        提供Django的cookie以及session框架的支持,这两个基于消息中间件实现。

7.安全中间件

    路径:

        django.middleware.security.SecurityMiddleware

    用法:

         如果部署环境允许的话,在前端的web服务中执行安全中间件提供的功能将是一个很好的选择。这样当有请求了Django不提供的服务时,如获取静态资源以及用户文件上传等,在前端就可以对其进行相同与后端保护的安全保护,就像在Django后端来保护一样。

        这个中间件提供了几种安全增强的服务来保护整个请求-响应周期。中间件通过向浏览器发送特定设置的头部信息来实现,而且这些服务都可以被独立的设置以及禁用。

    服务列表:

        1.HTTP Strict Transport Security(严格的HTTP传输安全)

            设置方式:

                1.SECURE_HSTS_INCLUDE_SUBDOMAINS:下级站点是否使用HTTPS安全链接方案

                2.SECURE_HSTS_SECONDS:设置对应时间内仅允许安全连接方式访问。

            说明:

                敬告:如果站点只允许通过HTTPS方式传输,可以通过设置头信息中的Strict-Transport-Security属性来永久拒绝或一段时间内拒绝浏览器通过不安全传输协议连接至站点。这样可以减少传输过程中暴露在中间人攻击下风险。而Strict-Transport-Securityd的属性设置,只要在设置了SECURE_HSTS_SECONDS值为非零值,安全中间件就会自动帮你在所有HTTPS响应中设置。

                 当启用了HSTS时,我们最好在第一次测试时使用一个较小的数字,如SECURE_HSTS_SECONDS设置为3600即一个小时。每次WEB浏览器在从站点上返回的头部信息中获取HSTS信息,根据HSTS信息来决定是否拒绝通过非安全连接通信连接站点。当确认了所有在站点上的资源都是通过安全通信(HTTPS)访问的时候即HSTS设置没有破环任何站点上的资源或状态等,就可以增加这个SECONDS值,以便也可以保护不经常访问的用户,可以设置为31536000秒,即一年。

                 如果设置SECURE_HSTS_INCLUDE_SUBDOMAINS属性值为True,则安全中间件将会在响应头部信息的Strict-Transport-Security属性中增加includeSubDomains标签,推荐将这个值设置为True,否则你的下级站点域名仍然可以通过非安全连接方式访问。

                 HSTS策略是适用于整个站点的,而非仅仅针对返回的response中所设置的URL,所以务必在整个站点都需要通过HTTPS方式下连接时,才启用这个服务。正确处理HTSTS头部信息的浏览器将会拒绝用户绕过警告或使用自签名以及过期的SSL证书来连接到站点,如果启用了HSTS策略,务必保证证书处于良好状态。

        2.X-Content-Type-Options:nosniff

            设置方式:

                1.SECURE_CONTENT_TYPE_NOSNIFF

            说明:

                一些浏览器可能会尝试猜测他们接受到的资源数据的content类型,然后重写Content-Type头部信息来帮助显示配置不正确的服务,但是这样会引发一些安全风险。

                如果站点允许用户上传文件,那部分恶意用户可以上传一个特殊定制的文件,这个定制的文件可能会被浏览器解释成HTML或者JavaScript等从而执行后造成破坏。为了防止浏览器猜测数据类型并强制它使用Content-Type头部信息中的类型定义,可以通过一个X-Content-Type-Options:nosniff的头部信息。只要设置SECURE_CONTENT_TYPE_NOSNIFF属性为True,安全中间件就可以自动为所有响应进行设置这样的头部信息。如果Django需要授权才能执行某些下载文件,而且在使用web服务时无法手动设置头信息时,该设置将会有用。

        3.X-XSS-Protection

           设置方式:

                1.SECURE_BROWSER_XSS_FILTER  启用XSS防护机制,设置True

            说明:

                一些浏览器具备阻止XSS攻击的能力,它们通过在页面中的GET和POST参数中检索javascript,如果javascript在服务端返回的响应中被重复运行,则浏览器会组织页面渲染并显示一个错误界面。可以通过设置X-XSS-Protection的头部信息来控制XSS攻击过滤操作。如果SECURE_BROWSER_XSS_FILTER设置为True,在浏览器中启用XSS防护机制。

                警告:浏览器的XSS过滤防护机制只是一种防御措施,不能完全依赖它,不同的浏览器设置不同,所支持的属性,头部信息有差异,仍然需要在后端进行验证输入已放置XSS攻击。

        4.SSL Redirect

           设置方式:

                1.SECURE_REDIRECT_EXEMPT #如果部分URL允许通过HTTP连接且不设置重定向到对应HTTPS,则可以把响应的URL配置在这个属性中,列表类型。

                2.SECURE_SSL_HOST  #如果设置了这个,则所有重定向将会发送到该参数对应的服务中,而不是请求的原始目标

                3.SECURE_SSL_REDIRECT  #将所有HTTP连接永久重定向到HTTPS连接中

            说明:

                如果站点允许HTTP和HTTPS连接,则大部分用户会默认使用HTTP连接方式连接,所以最好将HTTP的连接重定向到HTTPS连接。处于性能考虑,最好在负载均衡或反向代理服务器中进行重定向。

8.会话中间件(session middleware)

    路径:

        django.contrib.sessions.middleware.SessionMiddleware

    用法:

        启用会话框架

9.站点中间件(site middleware)

    路径:

        django.contrib.sites.middleware.CurrentSiteMiddleware

    用法:

        对任意一个访问的request请求对象都添加一个当前站点属性表明当前站点。

10.用户认证中间件

    Django提供三个用户认证中间件。

    路径:

        django.contrib.auth.middleware.AuthenticationMiddleware:在每个HttpRequest请求对象中添加user属性,表名当前已登录的用户。

        django.contrib.auth.middleware.PrmoteUserMiddleware:使用web服务器提供认证的中间件

        django.contrib.auth.middleware.SessionAuthenticationMiddleware:当用户密码发生改变时,则认证失效。必须在AuthenticationMiddleware中间件后面。

11.CSRF防御中间件

    路径:

        django.middleware.csrf.CsrfViewMiddleware

    用法:

        增加防御保护以防止跨站伪造请攻击。通过向表单中添加隐藏表单字段以及对请求进行检查以获取正确的值。

12.X框架操作中间件(X-Frame-Options Middleware)

    路径:

        django.middleware.clickjacking.XFrameOptionsMiddleware

    用法:

        通过头部信息中增加X-Frame-OptionsLAI 防止简单的点击劫持。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值