Django的CSRF学习笔记


XSS攻击

跨站脚本攻击

CSRF跨站请求伪造

架设我的网站:
点我


cfrf1.html
之前在settings.py中,将MIDDLEWARE中的: django.middleware.csrf.CsrfViewMiddleware 这行给予注释掉,相当于不做跨站请求伪造验证,再次去掉注释,使得CSRF生效,自动生成随机字符串,后台中间件开始验证。即使不显示写明验证操作。 但可以模板中加上: {% csrf_token %} 加在form表单中,可以在页面源码中看到随机字符串。 如果加上: { csrf_token }这时只会生成随机字符串,不会生成input框。 CSRF中间件还会在表单中使用随机字符串,在cookie中也增加CSRF字符串。 一般的网站都会带CSRF验证字符串。例如github.com。如果不加,不能称为成功的网站。 这时最简单的使用,如果注释掉CSRF中间件,表示整个网站不再验证CSRF。另外也可以局部禁用: 对不使用CSRF验证的函数,增加装饰器: from django.views.decorators.csrf import csrf_exempt @csrf_exempt def csrf1(): .... 这样,对csrf1函数不再使用CSRF验证。注意,局部禁用的时候,必须在settings中使用CSRF中间件。 另外,也可局部使用: from django.views.decorators.csrf import csrf_protect 装饰器 @csrf_protect表示使用CSRF的函数。此时,可以在设置中注释掉CSRF中间件。 在CBV类型的网站中: from django.views import view class Foo(view): def get(self,request): pass 此时上述装饰器只能在类前加,在类中方法不允许使用上述装饰器。 from django.utils.decorators import method_decorator @method_decorator(csrf_protect) 使用上述装饰器的使用方法,可以使用在类上或者类的方法上。 def wrapper(func): def inner(*args,**kwargs): return func(*args,**kwargs) return inner 这是典型的写装饰器的方法,只能使用Django的方法。 @method_decorator(warpper,name='get') 这种装饰器,仅对get函数进行装饰。 @method decorators(warpper,name='dispath') 对该类的所有函数进行装饰。 CSRF,装饰器必须加在类上,不能加在类中方法上。 AJAX中的CSRF: Ajax提交 这个JS文件将操作cookie的函数进行了打包,不必再自行进行分割等操作。