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. jvm-learning-概述

    JVM整体结构: java代码的执行流程 JVM的架构模型 public class StackStruTest { public static void main(String[] args) { ...

  2. java-設計模式-工場方法

      工廠方法: 一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型. 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中. 这满足创建型 ...

  3. 爬虫-数据解析-xpath

    xpath 解析 模块安装 : pip install lxml xpath的解析原理 实例化一个etree类型的对象,且将页面源码数据加载到该对象中 需要调用该对象的xpath方法结合着不同形式的x ...

  4. Python学习--Python的了解与安装

    Python简介: Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python 由荷兰人Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 19 ...

  5. .NET面试经典三问:什么是.NET?什么是.NET Framework?什么是.NET Core?

    什么是.NET?什么是.NET Framework? 本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要 ...

  6. Linux编程 | 使用 make

    目录 简单的 makefile 文件 常规的 makefile 文件 常用参数 make 内置规则 后缀和模式规则 make 管理函数库 在Linux 环境中,make 是一个非常重要的编译命令.不管 ...

  7. APICloud首款全功能集成开发工具重磅发布,彰显云端一体理念

    近日,APICloud重磅推出首款云端一体的全功能集成开发工具--APICloud Studio 2.为了更深入了解这款开发工具的特性及优势,APICloud CTO 邹达针对几个核心问题做出了解答. ...

  8. Codepen 每日精选(2018-4-6)

    按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以打开原始页面. 按照画出的路线吃豆子的交互动画https://codepen.io/createjs/f... 模拟真实手 ...

  9. onActivityResult执行两次问题

    差点被坑死 记一次onActivityResult被调用两次的坑

  10. 【Android开发】通过 style 设置状态栏,导航栏等的颜色

    <style name="test"> <!--状态栏颜色--> <item name="colorPrimaryDark"> ...