Django - CSRF

X-CSRF攻击。
黑客可以将被人的cookie拿走。
黑客可以用这个cookie来登录。

CSRF原理:
你们来我服务器请求,第一次请求来要数据,我不仅仅给你了数据,还给你了一个加密后的字符串。

其他的参考

需要怎么做:

settings.py中需要有 django.middleware.csrf.CsrfViewMiddleware 这个中间件
每次在模板里写 form 时都知道要加一个 {% csrf_token %} tag
每次发 ajax POST 请求,都需要加一个 X_CSRFTOKEN 的 header

我们不要吧settings.py中的中间件'django.middleware.csrf.CsrfViewMiddleware'注释掉,它是来保护我们的。

在模板中:

{{ csrf_token }}  # 这样就会显示它
{% csrf_token %}  # 不会显示,但是会存在于模板

后者会在html中生成一个隐藏的input框,type=hidden

在cookie中也生成了csrftoken。

Django - CSRF_第1张图片
图片.png

如果ajax发送的话,那么需要在cookie中取得到csrftoken,放在请求头再发过去。

1)form提交的时候,将csrf_token带过去:

{% csrf_token %}

2)如果ajax提交:

我们可以从上面的在cookie中也生成了csrftoken,取出然后传递过去。

示例:
js方式提交数据。




{% csrf_token %}

两种方式提交:

1)form 表单提交

 
{% csrf_token %}

2)ajax提交



部分函数不需要CSRF或者说部分函数需要CSRF的处理方法

1)通过装饰器csrf_protectcsrf_exempt来进行

from django.views.decorators.csrf import csrf_protect, csrf_exempt

@csrf_exempt  # 不需要csrf认证
def me1(request):
    pass 

@csrf_protect  # 需要csrf认证
def me2(request):
    pass 

2)通过通过请求方式来区分加还是不加csrf

Django - CSRF_第2张图片
图片.png

你可能感兴趣的:(Django - CSRF)