zoukankan      html  css  js  c++  java
  • XSS攻击 跨站请求伪造(CSRF)原理及作用 全局配置CSRF 局部配置CSRF用户数据提交方式

    XSS攻击

    XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。例如web页面可以运行评论中的js代码

    XSS攻击的危害包括

    1. 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
    2. 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
    3. 盗窃企业重要的具有商业价值的资料
    4. 非法转账
    5. 强制发送电子邮件
    6. 网站挂马
    7. 控制受害者机器向其它网站发起攻击

    跨站请求伪造(CSRF)原理及作用

    作用:实现防止跨站请求伪造的功能

    • 原理

      1. 用户向服务器发出请求(例如,GET),服务器端返回用户请求,并将服务器端唯一解密的CSRF生成的随机字符串发送给用户。
      2. 用户向服务器提交数据时,需要带着服务端给用户的加密随机字符串;否则,不允许用户提交数据。
    • 检测原理

      1. 当用户从服务器端获取数据时,没有限制
      2. 当用户向服务器端提交数据时,首先验证加密随机字符串是否存在、正确,然后再进行业务处理。

    全局配置CSRF

    工程中的settings.py

    MIDDLEWARE = [
    	'django.middleware.csrf.CsrfViewMiddleware',
    ]
    

    局部配置CSRF

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

    @csrf_protect 当前函数强制设置防跨站请求伪造功能,即便settings.py中没有设置全局中间件。

    @csrf_exempt 取消当前函数防跨站请求伪造功能,即便settings.py中设置了全局中间件。

    以装饰器的形式添加到相应函数上,即可

    用户数据提交方式

    1. form表单

       <form action="/login/" method="post">
           {% csrf_token %}
       </form>
      

      效果:表单和cookie中都存在了

    2. ajax

    数据提交到请求头

    请求头里面不能出现下划线,有下划线是非法的

    方式一
    	headers: {'X-CSRFtoken': $.cookie('csrftoken')},
    
    	例如:
    	$('#btn1').click(function () {
                $.ajax({
                    url: '/login/',
                    type:"GET",
                    data: {'user': 'root', 'pwd': '123'},
                    headers: {'X-CSRFtoken': $.cookie('csrftoken')},
                    success:function(arg){
    
                    }
                })
            });
    
    方式二
    	$.ajaxSetup({
                beforeSend: function(xhr,settings){
                    xhr.setRequestHeader('X-CSRFtoken', $.cookie('csrftoken'));
                }
            });
    	该函数会在ajax请求之前执行,没用每个ajax添加header,因是全局配置
    
    	本质是调用
    		obj = XMLHttpRequest()
    		obj.open()
    		obj.send()
    
    补充1
    	CsrfViewMiddleware类的process_view方法的CSRF_HEADER_NAME
    
    	from django.middleware.csrf import CsrfViewMiddleware
        from django.conf import settings
        print(settings.CSRF_HEADER_NAME)	#HTTP_X_CSRFTOKEN 是Django处理过的请求头
    
    补充2
    	html
    		headers:{'zzzzzzzz': 123},
    	
    	views.py
    		for connect in request.META:
            if re.search('zzz', connect, re.IGNORECASE):
                print(connect)
    
    	打印信息:
    		HTTP_ZZZZZZZZ #可以看出HTTP_是Django默认添加上的
    
  • 相关阅读:
    Python实现机器人聊天
    node.js使用express框架进行文件上传
    nginx让所有的http地址重定向到https
    nginx配置https
    vscode源码编译运行打包使其由英文变为中文
    阿里云配置tomcat https
    springboot打成的jar包如何在Linux上持久运行
    wordpress数据表分析
    DevExpress Components16.2.6 Source Code 重编译教程
    DataGridView绑定泛型List时,利用BindingList来实现增删查改
  • 原文地址:https://www.cnblogs.com/todayisafineday/p/8783701.html
Copyright © 2011-2022 走看看