django 安全 csrf xss攻击

安全:
        xss:
            跨站脚本攻击
            web网站:js脚本
                例如在网站留言这个<script>alert('123')</script>
                此时再次打开网页会弹出一个对话框,这是因为alert的js脚本作用,所以要过滤js脚本
                django默认自带转义不会让js脚本作用,加了safe后取消了对数据的转义
                -<script>alert('123')</script> #弹出对话框
                -<script>document.cookie</script> #获取到cookie,打开网页会得到用户的cookie,不安全
                
        csrf:
            跨站请求伪造
                方法:加随机的字符串
                        只能防止一大部分人
                django的方法:
                -FBV
                    全站使用csrf验证
                        -开启django.middleware.csrf.CsrfViewMiddleware
                        -开启后在form表单里添加token
                            <form action="/csrf1/" method="post">
                                {% csrf_token %}
                                <input type="text" name="username">
                                <input type="submit" value="提交">
                            </form>
                    全站使用csrf,但是局部业务不适用csrf
                        -开启django.middleware.csrf.CsrfViewMiddleware
                        -针对局部业务函数,加上如下装饰器:
                        from django.views.decorators.csrf import csrf_exempt, csrf_protect
                        @csrf_protect
                        def csrf1(request):
                            if request.method == 'GET':
                                return render(request, 'csrf1.html')
                            else:
                                username = request.POST.get('username')
                                return HttpResponse('ok')
                                
                -CBV
                    from django.utils.decorators import method_decorator
                    @method_decorator(csrf_protect, name="get")#只能定义一个
                    @method_decorator(csrf_protect, name="post")#加两个写两次
                    class UserInfo(views):
                        def get(self,req):
                            pass
                        def post(self,req):
                            pass
                            
                ajax方式提交数据
                    1.data数据:
                        第一种方式 通过jquery获取csrf_token然后用ajax的data传送
                                $("#btn").click(function () {
                                var csrf_token = $("input[name='csrfmiddlewaretoken']").val();#通过name获取csrf_token
                                $.ajax({
                                    url:"/csrf/",
                                    type:"POST",
                                    data:{"username":$("#username").val(),"csrfmiddlewaretoken":csrf_token}#csrf的key不能改
                                })
                            })
                    第二种方式 在headers里传送
                                $("#btn").click(function () {
                                $.ajax({
                                    url:"/csrf/",
                                    type:"POST",
                                    headers:{'X-CSRFToken':crsf_token},
                                    data:{"username":$("#username").val()}#csrf的key不能改
                                })
                            })
                    第二种方式更加安全

猜你喜欢

转载自blog.csdn.net/u014248032/article/details/84852294