Django信息安全相关之CSRF和XSS

什么是xss攻击

xss攻击:

黑客把恶意的JS脚本提交到后端,后端把恶意脚本渲染显示出来    

什么是CSRF?

1、你登录建行官网后 你的浏览器就保存了建行网站的cokie,(如果不关闭这个页面cookie一直生效,就可以发送任何请求)专门在cappron试了一下;

2、与此同时你 点了其他恶意页面(CSRF攻击的条件)

3、这个页面携带着你的cokie 伪造你 向到招商银行提交 一个转账form表单你就傻逼了!

(问题关键:登录某网站之后有了cokie,就可以发送任何请求;这时候最危险)

如何防止CSRF攻击

服务端端开启 csrf认证之后,

客户端发送get请求 要form表单时,在里面加上{% csrf_token %}一个随机字符串

客户端收到这个 带随机字符串的 form表单之后

客户端在向服务端 发post请求(不仅要有cokie还检查这个from表单是不是携带{% csrf_token %})
(不要以为有了cokie就可以随意发送 post请求了!)

说白了就是:服务端生成随机字符串发给客户端,下次客户端来了要检查他的这个随机字符串;

{% csrf_token %}{#
<QueryDict: {‘csrfmiddlewaretoken‘: [‘Vk4rQ7L3d2stscFgHq7lKWTWSEcZrIRAAw3QJv6G2FLopBVJb7sONVbiP9aqDjgj‘], ‘user‘: [‘我‘], ‘pwd‘: [‘q‘], ‘gender‘: [‘1‘], ‘login‘: [‘yes‘]}>

Django应用CSRF

1.服务端全部禁用CSRF验证

在项目的setings文件把这个 中间件注释掉

‘django.middleware.csrf.CsrfViewMiddleware‘,

2、局部使用

免除FBV的 CRFS验证

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt(免除)
def login(request):
    if request.method==‘GET‘:
        return render(request,‘login.html‘)
    else:
        print(request.POST)
        return HttpResponse(‘OK‘)

要求FBV使用CRFS验证

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

@csrf_protect(保护)
def login(request):
    if request.method==‘GET‘:
        return render(request,‘login.html‘)
    else:
        print(request.POST)
        return HttpResponse(‘OK‘)

3、CBV应用CSRF验证

要想在CBC局部使用或者禁用CRF验证就必须 导入method_decorator(方法装饰)

from django.utils.decorators import method_decorator
@method_decorator(csrf_exempt,name=‘dispatch‘)
class login(View):
    def get(self,request):
        return render(request,‘login.html‘)

    def post(self,request):
        return HttpResponse("ok")

4、from表单添加CSRFtocken

{% csrf_token %}

Ajax应用CSRF

如果服务端开启了CSRF验证,客户端就发送post请求就必须携带 服务端给的CSRF
那问题来了如果发 ajanx请求呢?

答案:客户端发送 get请求时,服务端会把CSRF tocken放在form表单中(隐藏的input标签)发送给客户端

如果客户端再发post请求给服务端找到这个标签,name="csrfmiddlewaretoken"发送给服务端

<script src="/static/zhanggen.js"></script>
</head>
<body>
<h1>欢迎来到百合网</h1>
<form>

{#        服务端开启csrf认证#}
    <p>用户:<input type="text" name="user" ></p>
    <p>密码:<input type="password" name="pwd"></p>
    <p>
        性别:男:<input type="radio" name="gender" value="1" b="1">
              女:<input type="radio" name="gender" value="2">
    </p>
    <p><input type="checkbox" name="login" value="yes" zhanggen="1">一周免登录</p>
    <input type="button" value="提交" onclick="a()">
</form>
</body>
<script>
    function a(){
        tocken=$(‘[name="csrfmiddlewaretoken"]‘).val()
        $.ajax({
            url:‘/login/‘,
            type:‘POST‘,
            data:{‘csrfmiddlewaretoken‘:tocken},
        或者这样data:{‘csrfmiddlewaretoken‘:‘{{csrf_token}}‘},最后福建小伙向淫王一问
        })
    }
</script>
</html>

2、如果没有from表单携带CSRF的话,不要忘了CSRF的随机字符串也会放在cookie里面哦!!

导入<script src="/static/jquery.cookie.js"></script>

如果是在cookie里面 获取的 CSRF tocken(记号)就不能放在 ajax的请求体里面了

放在请求头里,而且必须以这个格式(headers:{‘X-CSRFToken‘:tocken},) 这是Django规定

注意cookie里的 CSRF tocken和 from表单里的不一样

 function a() {
     var tocken=$.cookie(‘csrftoken‘)
     $.ajax({
            url:‘/login/‘,
            type:‘POST‘,
            headers:{‘X-CSRFToken‘:tocken},
            data:{‘name‘:‘aa‘},
        })
    }

</script>
</html>
时间: 2024-10-12 13:19:18

Django信息安全相关之CSRF和XSS的相关文章

web安全CSRF和XSS

web端的安全攻击有CSRF和XSS两种,将通过以下三个方面介绍这两种安全攻击: 1.基本概念和缩写 2.攻击原理 3.防御措施 CSRF  1.基本概念和缩写 CSRF(Cross-site request forgery)跨站请求伪造,是通过伪装成受信任用户的请求来利用受信任的网站进行攻击. 2.攻击原理 3.防御措施 CSRF是攻击者可以利用保存到cookie伪造用户发送请求,所以防御的关键是在请求中放入攻击者不可伪造的信息. Token验证:在http请求的头信息中增加一个Token字段

Django中如何防范CSRF跨站点请求伪造***

CSRF概念 CSRF跨站点请求伪造(Cross-Site Request Forgery). ***者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了***者所期望的一个操作,比如以你的名义发送邮件.发消息,盗取你的账号,添加系统管理员,甚至于购买商品.虚拟货币转账等. CSRF***原理以及过程 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A: 2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功

4.26日第14次作业,23章项目整体绩效评估,24-32章信息安全相关知识

一.23章:项目整体绩效评估 1.三E审计是什么的合称?(记)P524 答:三E审计是经济审计.效率审计和效果审计的合称,因为三者的第一个英文字母均为E,顾称为三E审计. 2.霍尔三维结构是从哪三个方面考察系统工程的工作过程的?P527-528 答:霍尔三维结构是霍尔(A Hall)提出的关于系统方法论的结构,它从逻辑.时间.知识三方面考察系统工程的工作过程. 3.投资回收期的公式?(记,并理解)P533答:投资回收期的公式:(累计净现金流量出现正值的年份-1) + (上年累计净现金流量值的绝对

2016年4月26日作业(项目整体绩效评估、信息安全相关知识、信息工程监理知识)

一.项目整体绩效评估1.三E审计是什么的合称?(记)P524 答:绩效审计(三E审计)是经济审计.效率审计和效果审计的合称,因为三者的第一个英文字母均为E,故称三E审计.2.霍尔三维结构是从哪三个方面考察系统工程的工作过程的?P528 答:从逻辑.时间.知识三方面考查系统工程的工作过程.3.投资回收期的公式?(记,并理解) 答:投资回收期公式为:(累计净现金流量开始出现正值的年份数)-1+(上年累计净现金流量的绝对值/当前净现金流量).二.信息安全相关知识1.在三安系统三维空间示意图中,X,Y,

Django学习系列之CSRF

Django CSRF 什么是CSRF CSRF, Cross Site Request Forgery, 跨站点伪造请求.举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果 某个用户已经登录到你的网站上了,那么当这个用户点击这个恶意网站上的那个链接时,就会向你的网站发来一个请求, 你的网站会以为这个请求是用户自己发来的,其实呢,这个请求是那个恶意网站伪造的 Django提供的CSRF防护机制 django 第一次响应来自某个客户端的请求时,会在服务器端随机生成一个 token,把这个 t

CSRF和XSS

XSS(跨站脚本攻击): 攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击 XSS是什么?它的全名是:Cross-site scripting,为了和CSS层叠样式表区分所以取名XSS.是一种网站应用程序的安全漏洞攻击,是代码注入的一种.它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响.这类攻击通常包含了HTML以及用户端脚本语言. CSRF(跨站请求伪造): 攻击者发现CSRF漏洞——构造代码——发送给受害人——受害

Python自动化运维 - day17 - Django(三)CSRF

CSRF跨站请求伪造 CSRF跨站点请求伪造(Cross-Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件.发消息,盗取你的账号,添加系统管理员,甚至于购买商品.虚拟货币转账等. CSRF攻击介绍及防御 人设:Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合

利用django中间件CsrfViewMiddleware防止csrf攻击

一.在django后台处理 1.将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项目中会自带的. MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middle

网站攻防之CSRF和XSS跨站脚本攻击

进入正题之前,先扯一番:黑客本义并非某些人以为的利用网络干坏事的人,刚开始或者说现在的很多,黑客是以技术大牛的形式存在的,也就是在网络领域有一门专场的牛人.有些黑客不干坏事而是干好事,比如利用网站的漏洞,去告诉网站开发运营者你的网站有漏洞,要修补啦,他们却并不会利用这漏洞干坏事,而是以发现漏洞追求技术快感为享受. 说是网站攻防演练,但估计这套东西已经很老很少用了,毕竟作为课程实验的实例都是"经典"的.不过里面的攻防思想特别是利用漏洞的思想对于学习是很有用处的. (下面对于CSRF的解释