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

posted @ 2019-12-12 22:34  Agsol  阅读(678)  评论(0编辑  收藏  举报