XSS攻击:

XSS(Cross Site Script)攻击叫做跨站脚本攻击,他的原理是用户使用具有XSS漏洞的网站的时候,向这个网站提交一些恶意代码,当用户在访问这个网站的某个页面的时候,这个恶意的代码就会被执行,从而来破坏网页的结构,获取用户的隐私信息等。

XSS攻击场景:

比如现在有一个发布帖子的入口,如果用户在提交数据的时候,提交一段js代码,比如,,然后网页在渲染的时候直接将该代码渲染了,那么就会在浏览器的窗口中弹出一个对话框显示Hello world!如果攻击者能成功的运行这段js代码,那么他就可以运行更多的js代码,进而操控我们的网页,这就会让我们的网页用户的信息等非常不安全。

XSS攻击防御:

1. 如果不需要显示一些富文本,那么在渲染用户提交的数据的时候,直接进行转义就可以了。在Django的模板中默认就是转义的。也可以把数据在存储到数据库之前,先转义再存储进去,这样以后在渲染的时候,即使不转义也不会有安全问题,示例代码如下:
from django.template.defaultfilters import escape
from .models import Comment
from django.http import HttpResponse def add_comments(request):
content = request.POST.get('content')
<!--使用escape()函数,可以在数据存储到数据库之前先进行转义,再存储到数据库中,这样即使之后网页不进行转义,也没有关系-->
escaped_content = escape(content)
Comment.objects.create(content=escaped_content)
return HttpResponse('success!')
2.如果对于用户提交上来的数据包含了一些富文本(比如:给字体设置颜色,字体加粗等), 那么这时候我们在渲染的时候也要以富文本的形式进行渲染,就需要使用safe过滤器将其标记为安全的,这样才能显示富文本样式,但是这样又会存在一个问题,如果用户提交上来的数据攻击的代码呢?这时候再将其标记为安全的,肯定就不行了,示例代码如下:
<ul>
{% for comment in comments %}
<!--使用safe过滤器,将数据标记为安全的-->
<li>{{ comment.id }} . {{ comment.comment|safe }}</li>
{% endfor %}
</ul>
那么这个时候要怎样处理呢? 这时候就可以指定某些标签是我们需要的(比如,span标签),而某些标签我们是不需要的(比如:script)。那么,我们在服务器处理这些数据的时候,就可以将这些数据的标签保留下来,把不需要的标签进行转义,或者是直接进行删除,这样就可以解决我们的问题了,这个方法是可行的,很多线上的网站也是这样的,在python中有一个库我们可以用来处理这个事情,sanitizer。
富文本字符串处理
(1)bleach库是用来清理包含html格式字符串的库,他也可以指定哪些标签需要保留,哪些标签是需要过滤的,也可以指定标签上哪些属性是可以保留的,哪些属性是不需要的,想要使用这个库,可以执行pip install bleach 命令进行安装。
(2)这个库最重要的一个方法是bleach.clean()方法,bleach.clean()示例代码如下:
@require_POST
def add_comments(request):
# 从客户端获取数据
comment = request.POST.get('comment')
# bleach默认定义的一些标签,在原来的基础上添加一个img标签
tags = ALLOWED_TAGS + ['img']
# bleach默认定义的一些属性,在原来的基础上,在img标签上添加一个src属性
<!--这里使用**ALLOWED_ATTRIBUTES,主要是将ALLOWED_ATTRIBUTESdict中的键值对打散开,之后,可以和'img':['src'],进行拼接成一个字典-->
如果不打散的话就会形成{{},'key':'value'}
attributes = {**ALLOWED_ATTRIBUTES, 'img': ['src']}
<!--选择符合bleach.clean()方法中tags和标签都符合的comment-->
clean_data = bleach.clean(comment, tags=tags, attributes=attributes)
# 保存到数据库中
Comment.objects.create(comment=clean_data)
return redirect(reverse('index'))
(1)tags:表示允许哪些标签。
(2)attribute:表示标签中允许哪些属性。
(3)ALLOWED_TAGS:这个变量是bleach默认定义的一些标签,如果不符合要求,可以对其进行增减或者是删除。
(4)ALLOWED_ATTRIBUTES:这个变量是bleach默认定义的一些属性,如果不符合要求,可以对其进行增减或者是删除。
在以上这个views.py中,为默认的网页加载标签中添加了一个img标签,并且为img标签添加一个属性src,同时在项目中创建一个js文件,示例代码如下:
window.onload = function () {
var imgTag = document.createElement('img');
imgTag.setAttribute('src', 'http://img.haote.com/upload/news/image/20170605/20170605144101_12960.jpg');
document.body.appendChild(imgTag);
};
此时就可以在index.html中进行加载该js文件了,并且可以完美的加载img图片。

155.XSS攻击原理的更多相关文章

  1. PHP 安全三板斧:过滤、验证和转义之转义篇 & Blade模板引擎避免XSS攻击原理探究

    PHP 转义 实现 把输出渲染成网页或API响应时,一定要转义输出,这也是一种防护措施,能避免渲染恶意代码,造成XSS攻击,还能防止应用的用户无意中执行恶意代码. 我们可以使用前面提到的 htmlen ...

  2. XSS攻击原理、示例和防范措施

    XSS攻击 XSS(Cross-Site Scripting,跨站脚本)攻击历史悠久,是危害范围非常广的攻击方式. Cross-Site Stripting的缩写本应该是CSS,但是为了避免和Casc ...

  3. web安全之XSS攻击原理及防范

    阅读目录 一:什么是XSS攻击? 二:反射型XSS 三:存储型XSS 四:DOM-based型XSS 五:SQL注入 六:XSS如何防范? 1. cookie安全策略 2. X-XSS-Protect ...

  4. XSS攻击原理及防御措施

    概述 XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列 表,然后向联系 ...

  5. 浅谈XSS攻击原理与解决方法

    概述 XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人 ...

  6. xss攻击原理与解决方法

    概述 XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列 表,然后向联系 ...

  7. XSS攻击-原理学习

    本文优先发布于简书https://www.jianshu.com/p/04e0f8971890 1.百度百科XSS,跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样 ...

  8. XSS攻击原理

    本文转载的地址:http://www.2cto.com/Article/201209/156182.html Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意h ...

  9. 了解 XSS 攻击原理

    在了解 XSS 之前必须知道『网站登入(Session)』的原理 简单的说当会员成功登入后 网站会给浏览器一个『令牌』 之后只要拿着这个『令牌』到网站上 就会被视为已经登入 再来下面是 XSS 最简单 ...

随机推荐

  1. 使用QT显示OpenCV读取的图片

    目录 1. 概述 2. 实现 2.1. 代码 2.2. 解析 3. 结果 1. 概述 OpenCV自带了一部分常用的GUI功能,但是更多的图像处理功能需要其他GUI框架来辅助实现,这里通过QT来显示O ...

  2. MySql学习-2. NavicatforMySQL 与 MySql的对接以及一些操作:

    1.连接: 2.数据库的创建: 3.数据库中表的创建:    4.表的设计: 4.1 设计表: 4.2 增加数据(自动递增只是保证唯一值,即使数据删除了也是得前进):

  3. Android 调试桥 (adb) 是 命令行命令--官方拷贝过来的,留作自己查看

    Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信.adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令 ...

  4. 关于apt-get remove 与 apt-get purge

    今天在Ubuntu服务器上安装supervisor,部署没成功想卸载重来,sudo apt-get remove supervisor 后发现配置文件还在,便手动删除了配置文件.再次安装,提示配置文件 ...

  5. 部署Nexus作为docker的私有仓库

    目录 Docker搭建Nexus私有仓库... 1 一.安装部署... 1 1.安装... 2 2.访问网页端... 2 二.配置使用... 2 1.创建本地仓库... 2 2.docker配置... ...

  6. CSS 如何实现当鼠标放在上面时整行变色呢?

    摘要:下文讲述css中实现鼠标放在指定行上面时,整行变色的方法分享,如下所示: 实现思路:使用:hover伪类,实现当鼠标指向时,其背景色发生相应的变化,如下例所示: 例: 下文中的div,当鼠标放上 ...

  7. postman请求(请求方式、请求url、请求参数、参数类型、请求头)

    请求方式:get 请求地址: 请求参数:url与参数用?间隔,多个参数用&间隔 请求方式:post 请求地址: 请求参数: 请求参数格式:前面两种是key-value.第三种可以选择json/ ...

  8. tp5使用PHPexcel扩展导出excel表

    1,使用composer安装phpexcel包: composer require phpoffice/phpexcel 2,在控制器中创建方法: (1)使用PHPexcel扩展.代码如下 /** * ...

  9. 【Vue2.x笔记2】从源码看computed对象

    computed 初始化函数 const computedWatcherOptions = { lazy: true } function initComputed (vm: Component, c ...

  10. python复习基础题目

    第一部分 必答题(每题2分) 简述列举了解的编程语言及语言间的区别? 编译型语言:一次性全部编译成二进制码,再去执行 解释性语言:编译一句,运行一句 python 解释型,简洁高效,容易上手 Java ...