网页攻击
Xss攻击
1、原理
xss攻击为跨站脚本攻击,主要原因是用户输入的内容不可控形式为在别人的评论区,
或者留言板写入js代码并且提交,如果我们不添加防护措施,就会造成,输入的
js代码会被浏览器解析执行,从而让别人获取到我们浏览器中的信息
2、代码
django中是默认有xss保护的,
如果我们想要取消xss保护,通关 管道符 加上 safe
前端接收参数 {{ page_info | safe }}
后端直接传入js代码, 就可以被浏览器解析执行
CSRF攻击
csrf攻击为跨站伪造攻击
当我们访问了不受信任的网站时,某一个图片或者连接很有可能会将我们
浏览器的一些信息发送到黑客的电脑上,然后他们伪造我们去一些受信任的
网站对我们的账号进行一些操作(可以轻松拿到我们的cookie)
由此可见,普通的cookie验证防护不了这种csrf攻击,因此我们通过服务器给浏览器发送
一个token字符串进行认证
1、开启csrf验证Djan配置中开启CSRF中间件
'django.middleware.csrf.CsrfViewMiddleware',
b. 前端表单中开启csrf_token
<form action=""> {% csrf_token %} <input type="text">
2、当我们开启csrf认证后,想要让部分业务逻辑关闭csrf认证
from django.views.decorators.csrf import csrf_exempt # 先导入csrf_exempt @csrf_exempt def test2(request): pass
这样即便开启了全局csrf认证,也能通过装饰器关闭test2的csrf认证
3、当我们关闭csrf认证后,想要让部分业务逻辑开启csrf认证
from django.views.decorators.csrf import csrf_protect # csrf_protect @csrf_protect def test2(request): pass
4、CBV装饰器的使用
我们上面演示的都是FBV,如果是CBV
from django.views.decorators.csrf import csrf_protect,csrf_exempt from django.utils.decorators import method_decorator #csrf_protect 表示关闭的全局csrf认证, 开启部分csrf认证 #csrf_exempt 表示开启全局csrf认证, 关闭部分csrf认证 # name 表示只使用于某种提交的方式 @method_decorator(csrf_exempt,name="get") class Test(object): def get(self): pass def post(self): pass
5、ajax提交token的方式
<script> {# 首先我们要获取到token#} {#通过属性选择器找到存放token值的标签 $("input[name='csrfmiddlewaretoken']") #} csrf_token = $("input[name='csrfmiddlewaretoken']").val(); $.ajax({ type:"post", url:"/test2/", {#token放在headers中提交过去,并且headers里面的key时固定的#} headers:{"X-CSRFToken":csrf_token}, success:function () { } }) </script>