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的函数进行了打包,不必再自行进行分割等操作。