XSS攻击:

XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。

比如获取用户的cookie。

Django已经默认做了处理,自动防御xss攻击。

但是有时候需要通过传输HTML代码并且让其显示在页面上的时候怎么做:

在需要的时候添加 xxx|safe   需要注意以下几点:

1.不能在别人能修改的地方添加

2.添加的时候要带上特殊字符的过滤

CSRF攻击(跨站请求伪造):

用户U登录了一家银行B,然后同时用点进去一个带颜色的网站,网站有些特殊的图片(隐藏着href请求银行B转账的标签)

用户U点击后,因为之前已经成功登录到银行B,拿到其对应的cookie, 这个隐藏的href请求就被银行识别为用户U的操作

带颜色网站通过伪造转账请求,成功收到用户在毫不知情下的转账。

应对方法:

1.银行在收到第一次get请求的时候,返回一串随机字符串,后续的操作用户需要带着这个随机字符串来(CSRF),请求才有效。

而且这个随机字符串只会在银行的页面有。带颜色网站因为没有这个随机字符串,请求无效403。(除非破解其随机字符串算法)

2.短信验证

3.令牌

Django自动开启CSRF防御

settings-MIDDLEWARE- django.middleware.csrf.CsrfViewMiddleware',

FBV

#--------全局禁用
#'django.middleware.csrf.CsrfViewMiddleware'
直接把这的东西注释掉就行 #---------局部禁用
'django.middleware.csrf.CsrfViewMiddleware'
from django.views.decorators.csrf import csrf_exempt
在对应函数上加上装饰器
@csrf_exempt
def default(request):
pass #---------局部使用
#'django.middleware.csrf.CsrfViewMiddleware'
from django.views.decorators.csrf import csrf_protect
@csrf_protect
def default(request):
pass

CBV

 1 from django.utils.decorators import method_decorator
2 @method_decorator(csrf_protect)
3 加到类上面,对整个类起作用
4 加到类里面某个方法上面,对这个方法起作用
5 @method_decorator(csrf_protect,name='get')#对类里面的get方法加装饰器
6 @method_decorator(csrf_protect,name='post')#可以在类上这样叠加着写,给多个方法加
7 给dispatch加相当于给所有方法都加上
8
9 ps:
10 dispatch作用:
11
12 dispatch方法接受请求并最终返回响应。通常,它通过调用另一个方法(如get)来返回响应。把它看作是请求和响应之间的中间人。
13
14
15 from django.shortcuts import HttpResponse,render,redirect
16
17 from django.views import View
18
19 class Login(View):
20
21 def dispatch(self, request, *args, **kwargs):
22 print('before') # 类似装饰器 先执行before 再执行after 中间的就是下面方法执行结果
23 obj=super(Login,self).dispatch(request, *args, **kwargs)
24 print('after')
25 return obj
26
27 def get(self,request):
28 return render(request, 'login1.html')
29
30 def post(self,request):
31 print(request.POST.get('title'))
32 return HttpResponse('ok')
33
34 #title=‘牛牛’
35
36
37 #执行结果:
38 before
39 after
40 before
41 牛牛
42 after

此时提交数据的话就需要在form表单和Ajax中带上添加上对应的东西

在form表单中加上{% csrf_token %}

   <form  method="POST" action="/xx/">
{% csrf_token %}
<p>用户:<input id="" type="text" name="username"/></p>
<p>密码:<input type="password" name="password"/></p>
<p><input type="submit" name="提交">{{message}}</p>
</form>
不仅会在form内部加上字符串,在你的cookie里面也会加上csrftoken

Ajax请求的时候放入data中:

从源码看form表单内csrf_token的值:
<input type="hidden" name="csrfmiddlewaretoken" value="d11IbXhGli1qRbN3QogQhdWeXHBMnwCJzbtQyCfef0YecNLuCIhHTFzh25FYnkX7"> var csrf=$('input[name="csrfmiddlewaretoken"]').val();
var user=$('#id').val(); $.ajax(
{
url:'/form_login_ajax/',
type:'POST',
data:{'csrfmiddlewaretoken':csrf,'use'=user}
}) data里面的key要与后台获取值的key一一对应 #也可以把CFRF的值这样放入data
data:{'csrfmiddlewaretoken':'{{csrf_token}}','use'=user}

Ajax请求的时候获取cookie中的csrftoken,放入请求头headers中

通过js获取cookie的值
在F12-Console 里面:document.cookie 可以看到CFRS随机字符串(键值) 插件:jquery.cookie.js(依赖于jquery) 可以cookie操作
$.cookie('csrftoken')直接拿到CFRF随机字符串
$.cookie('qwer','asdf') ,在本地cookie里面再增加一个键值对 var token=$.cookie('csrftoken') #得放到请求头里面
$.ajax(
{
url:'/form_login_ajax/',
type:'POST',
headers:{'X-CSRFToken':token},
data:{'user':user},
}) X-CSRFToken是Django设定死的,就得这样写

XSS攻击&CSRF攻击 ----Django解决方案的更多相关文章

  1. 第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击

    第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击 sql注入攻击 也就是黑客通过表单提交的地方,在表单里输入了sql语句,就是通过SQL语 ...

  2. Django是如何防止注入攻击-XSS攻击-CSRF攻击

    注入攻击-XSS攻击-CSRF攻击介绍请访问:https://www.cnblogs.com/hwnzy/p/11219475.html Django防止注入攻击 Django提供一个抽象的模型层来组 ...

  3. XSS攻击 && CSRF攻击 基础理解

    一个网站,不管多么的帅气,多么的风骚,如果你不安全,那始终都是一个弟弟啊~ 今天又看了下XSS和CSRF攻击的文章,我也想发点什么普及下大家的安全意识,毕竟作为一名拥有伟大梦想的程序员,基本的安全意识 ...

  4. xss和csrf攻击

    xss(cross site scripting)是一种最常用的网站攻击方式. 一.Html的实体编码 举个栗子:用户在评论区输入评论信息,然后再评论区显示.大概是这个样子: <span> ...

  5. XSS攻击&SQL注入攻击&CSRF攻击?

    - XSS(Cross Site Script,跨站脚本攻击)是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式.跨站脚本攻击分有两种形式:反射型攻击(诱使用户点击一个嵌入恶意 ...

  6. XSS 和 CSRF 攻击

    web安全中有很多种攻击手段,除了SQL注入外,比较常见的还有 XSS 和 CSRF等 一.XSS(Cross Site Scripting)跨站脚本 XSS其实就是Html的注入问题,攻击者的输入没 ...

  7. XSS攻击 CSRF攻击

    XSS攻击: 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆, 故将跨站脚本攻击缩写为XSS.恶意攻击者 ...

  8. XSS与CSRF攻击

    一.XSS Cross Site Script,跨站脚本攻击.是指攻击者在网站上注入恶意客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一 ...

  9. 前端安全之XSS和csrf攻击

    1.Csrf攻击概念: csrf攻击(Cross-site request forgery):跨站请求伪造; 2.Csrf攻击原理: 用户是网站A的注册用户,且登录进去,于是网站A就给用户下发cook ...

随机推荐

  1. kafka 为什么那么快?

    Cache Filesystem Cache PageCache缓存 顺序写 由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快. Zero-copy 零拷⻉技术减少拷贝 ...

  2. springboot-数据库访问之jpa

    什么是springDate? springData的作用: 整体简化的架构: JPA :Java Persistence API 如果没有springData 我们需要去学每一种对应的jpa实现, 有 ...

  3. kafka 的高可用机制是什么?

    这个问题比较系统,回答出 kafka 的系统特点,leader 和 follower 的关系,消息 读写的顺序即可.

  4. Dubbo 推荐用什么协议?

    dubbo://(推荐) rmi:// hessian:// http:// webservice:// thrift:// memcached:// redis:// rest://

  5. Linux分区问题

    一.基本分区的作用及其大小 /boot分区: 存放引导文件和Linux内核文件等. 引导文件:判断启动哪一个操作系统或启动哪个内核. 内核:管理硬件和软件资源,程序与硬件之间的桥梁. 分区大小:100 ...

  6. runnable 和 callable 有什么区别

    callable 有返回值,并允许抛出异常 runnable 没有返回值,不会抛出异常

  7. 学习openldap01

    Linux 下openldap的详细介绍,搭建,配置管理,备份,案例 Ldap  服务应用指南 兼容(5.X&6.X) 1.1  Ldap 目录服务介绍 1.1.1 什么是目录服务(activ ...

  8. 什么是Viewport Meta(width详解)及在手机上的应用

    viewport是专为手机浏览器设计的一个meta标签: 有些屏幕很小有智能手机,但分辩率却可以做得很大,比如小米4的默认分辨率为:1920*1080,比许多电脑桌面的都还大,传统桌面网站直接放到手机 ...

  9. linux系统引导过程

    linux系统引导过程 linux-0.11引导时,将依次运行BIOS程序.bootsect.s.setup.s和head.s,完成引导过程后进入到main函数运行.BIOS完成硬件的检查与初始化等工 ...

  10. python-人物风云榜(实现排名)

    Description 又到了云之国一年一度的任务风云榜更新的大日子了.给出每个人风云力数值,需要你给出每个人的排名.注意,排名存在并列的情况. Input 一共有 22 行.第一行一个整数 n ,表 ...