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节点,

  • 相关阅读:
    Codeforces 1265A Beautiful String
    1039 Course List for Student (25)
    1038 Recover the Smallest Number (30)
    1037 Magic Coupon (25)
    1024 Palindromic Number (25)
    1051 Pop Sequence (25)
    1019 General Palindromic Number (20)
    1031 Hello World for U (20)
    1012 The Best Rank (25)
    1011 World Cup Betting (20)
  • 原文地址:https://www.cnblogs.com/agsol/p/12032093.html
Copyright © 2011-2022 走看看