Django中间件和CSRF跨站请求攻击

中间件类须继承自django.utils.deprecatiion.MiddlewareMixin类

中间件

开启中间件

# settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

中间件类须实现下列五个方法中的一个或多个:

  • process_request(self, request)
    执行路由之前被调用,在每个请求上调用,返回None或HttpResponse对象
  • process_view(self, request, callback, callback_args,callback_kwargs)
    调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
  • process_response(self, request,response所有响应返回浏览器被调用,在每个请求上调用,返回HttpResponse对象
  • process_exception(self, request, except
    ion)当处理过程中抛出异常时调用,返回一个HttpResponse对象
  • process_template_response(self, request, response)
    在视图函数执行完毕且试图返回的对象中包含render方法时被调用;该方法需要返回实现了render方法的响应对象

调用过程
在这里插入图片描述

CSRF

某些恶意网站上包含链接、表单按钮或者JavaScript,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作,这就是跨站请求伪造(CSRF,即Cross-Site Request Forgey)。

在html的form元素中添

{% csrf_token %}

特殊说明:
如果某个视图不需要django进行csrf保护,可以用装饰器关闭对此视图的检查

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def my_voew(request):
	return HttpResponse('Hello World!')

猜你喜欢

转载自blog.csdn.net/qq_48322523/article/details/120592385