zoukankan      html  css  js  c++  java
  • csrf和xss

    CSRF(cross site request forgery)

    跨站请求伪造,CSRF攻击的全称是跨站请求伪造( cross site request forgery),是一种对网站的恶意利用,尽管听起来跟XSS跨站脚本攻击有点相似,但事实上CSRF与XSS差别很大,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。你可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。 CRSF能做的事情包括利用你的身份发邮件、发短信、进行交易转账等,甚至盗取你的账号。

    解决

    form表单解决
    <form action="" method="post">
    	{% csrf_token %}
    	<p>username:<input type="text" name="username"></p>
    	<p>target_account:<input type="text" name="target_user"></p>
    	<p>money:<input type="text" name="money"></p>
    	<input type="submit">
    </form>
    <input type="hidden" name="csrfmiddlewaretoken" value="rJ47FeK9T55wavvVJGY6UxdM1kTMHhTqotGfaXjXIK8Ahz2Uvs02yR9T8bBn5q2D">
    
    

    只要在html中任意位置写`{%csrf_token%}

    ajax解决
    ajax如何解决
    	1.方式1  较为繁琐
    		先在页面任意的位置上书写{% csrf_token %}
    		然后在发送ajax请求的时候 通过标签查找获取随机字符串添加到data自定义对象即可
    		data:{'username':'jason','csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()},
    
    	2.方式2  较为简单 
    		data:{'username':'jason','csrfmiddlewaretoken':'{{ csrf_token }}'},		
    
    	3.方式3  官网提供的文件    最通用的一种方式
    		新建 js文件拷贝官网代码 导入即可 
    		你不需要做任何的csrf相关的代码书写
    
    

    csrf相关装饰器

    from django.views.decorators.csrf import csrf_exempt,csrf_protect
    # @csrf_exempt  # 不校验此函数 csrf
    def index(request):
    	return HttpResponse('index')
    
    @csrf_protect  #只校验此函数
    def login(request):
    	return HttpResponse('login')
    
    

    在使用csrf_protect方法时,可以将csrf中间件注释掉,因为此方法中自带csrf防御方法

    csrf与CBV
    # @method_decorator(csrf_exempt,name='post')  # csrf_exempt不支持该方法
    @method_decorator(csrf_exempt,name='dispatch')  # csrf_exempt
    class MyIndex(views.View):
    	# @method_decorator(csrf_exempt)  # 可以
    	def dispatch(self, request, *args, **kwargs):
    		return super().dispatch(request,*args,**kwargs)
    	def get(self,request):
    		return render(request,'transfer.html')
    	# @method_decorator(csrf_exempt,name='post')  # csrf_exempt不支持该方法
    	def post(self,request):
    		return HttpResponse('OK')		
    # csrf_exempt这个装饰器只能给dispatch装才能生效
    
    
    """
    csrf_protect方式全都可以  跟你普通的装饰器装饰CBV一致
    """
    # @method_decorator(csrf_protect,name='post')  # 可以
    class MyIndex(views.View):
    	@method_decorator(csrf_protect)
    	def dispatch(self, request, *args, **kwargs):
    		return super().dispatch(request,*args,**kwargs)
    	def get(self,request):
    		return render(request,'transfer.html')
    	# @method_decorator(csrf_protect)  # 可以
    	def post(self,request):
    		return HttpResponse('OK')
    
    

    注意:

    在CBV中,csrf_exempt装饰器只能装给dispatch方法才能生效

    而csrf_protect装饰器在任何地方都可以生效.

    XSS攻击

    跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言

    XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括JavaVBScriptActiveXFlash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话cookie等各种内容。

    防范手段

    1. 入参字符过滤

      在源头控制,把输入的一些不合法的东西都过滤掉,从而保证安全性。如移除用户提交的的DOM属性如onerror,移除用户上传的Style节点,

  • 相关阅读:
    Http异常状态码解决方案。
    integer 面试题。
    int转换为String,常用的四种方法。
    Implicit super constructor Array() is undefined for default constructor. Must define an explicit constructor
    Eclipse的常用设置。
    构造方法详解。
    this关键字。
    面向对象--构造方法知识点。
    生成1-100之间的随机数。
    redis回顾
  • 原文地址:https://www.cnblogs.com/agsol/p/12032093.html
Copyright © 2011-2022 走看看