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. opencv —— moments 矩的计算(空间矩/几何矩、中心距、归一化中心距、Hu矩)

    计算矩的目的 从一幅图像计算出来的矩集,不仅可以描述图像形状的全局特征,而且可以提供大量关于该图像不同的几何特征信息,如大小,位置.方向和形状等.这种描述能力广泛应用于各种图像处理.计算机视觉和机器人 ...

  2. C++中字符常量与字符常量不能直接相加

    定义string变量,并进行初始化,如下: string s1 = "Hello"; string s2 = s1 + "World"; string s3 = ...

  3. JS事件绑定的三种方式比较

    js事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  4. 洛谷题解 P1292 【倒酒】

    原题传送门 题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时,他们 ...

  5. 大二网课ing学习周记

    行稳致远,久久为功! 一个概念套着一个概念哦!码就是关键字,标识属性是也! 1.什么是主码和外码,请举例说明. 关键字也叫码! 首先,在一个关系中,能惟一标识元组的属性or最小属性集称为关系的候选码. ...

  6. .NET Core DI简单介绍

    依赖注入的基础 我们都知道DI,,他是一种开发模式.他是将服务可被应用程序任何位置的代码使用,当某个代码组件(如一个类)需要引用某些外部代码(一个服务)时.都有两种选择 1:直接在调用代码种创建服务组 ...

  7. ls, chgrp, chown, chmod

    ls命令 [root@client ~]# ls -la 总用量 dr-xr-x---. root root 2月 : . dr-xr-xr-x. root root 2月 : .. -rwxrwxr ...

  8. Wannafly Winter Camp 2020 Day 7E 上升下降子序列 - 数学

    神奇公式 #include <bits/stdc++.h> using namespace std; #define int long long int n,mod,c[205][205] ...

  9. Wannafly Winter Camp 2020 Day 5B Bitset Master - 时间倒流

    有 \(n\) 个点的树,给定 \(m\) 次操作,每个点对应一个集合,初态下只有自己. 第 \(i\) 次操作给定参数 \(p_i\),意为把 \(p_i\) 这条边的两个点的集合合并,并分别发配回 ...

  10. 2019版本kali linux-3 系统安装与基本调试

    本次的实验环境是: kali linux -3 kali linux 全版本地址: http://old.kali.org/kali-images/ 楼主的主系统是:kali linux  如果想学好 ...