xss

为什么不能阻止用户输入不安全数据

比如用户想发一篇标题的文章 1+1>2吗?

为什么不在数据库存的时候就处理好或者接口里处理好

1<2 会被转义为 1&lt;2,放到html中确实可以正常显示为 1<2,但如果要把它alert出来就还是1&lt;2

什么是xss

  • xss是一种注入

    • 用户将自己的html代码注入到我们的html
    • 类似SQL注入
  • 这是一种html的注入,所以与python,数据库无关

比如说:

数据:

value = "<script>alert(1);</script>"

模板:

<p><?=value?></p>

前两者生成的html:

<p><script>alert(1);</script></p>

这样就被注入了一段代码,然后浏览器诚实的解析执行了它

解决办法

  • 将用户数据转义为纯文本
  • 浏览器当做纯文本显示而不是解析

将上例模板改成:

<p><?-value?></p>
  • 上例中用的是<?=代表直接输出
  • 本例使用的是<?-代表转义后输出

(不同模板引擎在实现的时候会略有不同,但都大同小异)

生成的html:

<p>&lt;script&gt;alert(1);&lt;/script&gt;</p>

在浏览器上的表现:

<script>alert(1);</script>

html转义

为什么要转义

  • 为了能让html解释器可以解析出正确的页面
  • 就像在字符串中不可以直接输入"而得输入\"(不然字符串就断开了),在html中也得转义部分字符:
    • \ /
    • ' '
    • " "
    • < &lt;
    • > &gt;
    • & &amp;

假设我们要输出一个</p>字符串到页面,那html就会是:

  • <p></p></p>显然是不行的
  • <p>&lt;/p&gt;</p> 这样才是正确的

什么应该不转义

  • 需要展示为富文本
  • 并且绝对没有可执行代码(需要后端事先做好过滤)

什么应该转移(剩下的全部情况)

<img src="<%-src%>">
<div>
<%-text%>
</div>

script标签内

在script标签中,都是js代码,浏览器不会把他们当做html代码解析,所以不需要html转义

但script标签有个特性:从<script>标签开始,一直到</script>标签截止,所以需要注意:

<script>

var a='</script><script>alert(1)</script>'; // 到第一个</script>就截止了!!!

</script>
<script>
···
var a='<\/script><script>alert(1)<\/script>'; //这样就正确
···
</script>

如何把数据打到script里:

在script里也需要转义,但不是html转移,需要转移4个字符:' " / \,转移的方法就是在他们前边添加一个\,是不是有些熟悉,他比字符串转义只多一个/,剩下的全部一样

用到的工具就是jsonify,把后端变量变成js变量

<script>
···
var a=<?=JSON.stringify(a).replace(/\//g,'\\/')?>;
// 将会变成以下
var a="<\/script>";
var a=null;
var a={a:1};
···
</script>

jsonify规则:

  • None null
  • "str" "str"
  • True true
  • 1 1
  • map JSON

一下演示一些错误的使用方法:

<script>
···
var a="<?-a?>";
// 将会变成以下
var a="h&amp;m" //原来的数据是 h&m var a="<?=a?>";
// 将会变成以下
var a="</script><script>alert(1);</script>"
var a="</script>";alert(1); //被注入
···
</script>

js

写入:

只有涉及到操作html的时候才会有xss的问题:

  • html(html)
  • append(html)
  • ...

这些情况需要转义或者使用.text(text)方法替代。

.text('<>')是不需要转义的,因为不是设置html所以不需要html解析器解析,修改属性(.prop('src',src))也一样

读取:

    <div id="d" data-text="&amp;">&lt;</div>
$('#d').text(); // "<"
$('#d').html(); // "&lt;" $('#d').data('text'); // "&"

XSS完全解决方案的更多相关文章

  1. 防止 XSS 攻击 解决方案

    XSS又叫CSS英文缩写为Cross Site Script中文意思为跨站脚本攻击具体内容指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执 ...

  2. 安全漏洞系列(一)---XSS漏洞解决方案(C# MVC)

    参考地址:https://www.cnblogs.com/sagecheng/p/9462239.html 测试项目:MVCDemo 一.XSS漏洞定义 XSS攻击全称跨站脚本攻击,它允许恶意web用 ...

  3. XSS漏洞解决方案之一:过滤器

    一:web.xml文件 <!-- 解决xss漏洞 --> <filter> <filter-name>xssFilter</filter-name>   ...

  4. Xss问题解决方案

    xss跨站脚本攻击问题最主要是呈现在html页面的脚本被执行导致的结果,可分为两个方便作屏蔽 后台屏蔽 在前端上传的各个参数后,对其进行转义后再保存至数据库,属于暴力式转义,一般不建议.下面是写的例子 ...

  5. js对HTML字符转义与反转义

    注意: 在编写html时,经常需要转义,才能正常显示在页面上. 并且,还可以防止xss. 解决方案: 一, 使用正则: 使用正则转码: var value = document.getElementB ...

  6. 百度编辑器上传视频以及视频编辑器预览bug解决

    百度编辑器目前来讲是运用比较广泛的一个编辑器了,不仅开源还有中文的文档,所以很受欢迎,不过里面也有许多地方需要开发人员自己调试,其中一个比较常见的问题就是上传视频了,上传视频本身有一些小bug,这个基 ...

  7. Cross-Site Scripting: Reflected

    首先贴解决办法吧,解决了我项目中的问题,不一定适用所有情况. //For Cross-Site Scripting: Reflected public static String filter(Str ...

  8. XSS(跨站脚本攻击)漏洞解决方案

    首先,简单介绍一下XSS定义: 一 . XSS介绍 XSS是跨站脚本攻击(Cross Site Scripting)的缩写.为了和层叠样式表CSS(Cascading Style Sheets)加以区 ...

  9. XSS 跨站脚本攻击 的防御解决方案

    虽然说在某些特殊情况下依然可能会产生XSS,但是如果严格按照此解决方案则能避免大部分XSS攻击. 原则:宁死也不让数据变成可执行的代码,不信任任何用户的数据,严格区数据和代码. XSS的演示 Exam ...

随机推荐

  1. SPOJ 416 - Divisibility by 15(贪心)

    糟烂的代码啊...  这个题目思路很简单——末位只可能为0和5,所有数字的和肯定被3整除 没有0和5的肯定不行 否则,把所有数字求和 如果被3整除,则从大到小输出 如果除3余1,则按以下顺序——删1: ...

  2. HashMap的分析(转)

    一.HashMap概述 HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了不同步和允许使用 null 之外,HashMap  ...

  3. Python-elementTree方法解析xml文件-01

    [XML基本概念介绍] XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据.概念一: <foo> # foo元素的起始标签 ...

  4. R语言——包的添加和使用

    R是开源的软件工具,很多R语言用户和爱好者都会扩展R的功能模块,我们把这些模块称为包.我们可以通过下载安装这些已经写好的包来完成我们需要的任务工作. 包下载地址:https://cran.r-proj ...

  5. Javascript和jQuery WordPress 图片轮播插件, 内容滚动插件,前后切换幻灯片形式显示

    用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美的图片轮播效果,希望这些插件 ...

  6. LayoutInflater 原理分析 示例

    LayoutInflater简介        LayoutInflater 顾名思义就是布局填充器,做过Android界面编程,相信对这个类都比较熟悉,可能有人说,我们在activity中使用set ...

  7. Sass函数--字符串函数

    Sass的函数简介在 Sass 中除了可以定义变量,具有 @extend.%placeholder 和 mixins 等特性之外,还自备了一系列的函数功能.其主要包括: ● 字符串函数 ● 数字函数 ...

  8. C# 数学运算符

    运算符大致分为如下3类: 一元运算符,处理一个操作符 二元运算符,处理两个操作数 三元运算符,处理三个操作数 大多数运算符都是二元运算符,只有几个一元运算符和一个三元运算符,即条件运算符(条件运算符是 ...

  9. 初学Java ssh之Spring 第三篇

    在这篇中,我学习了依赖注入的两种方式:设值注入和构造注入. 在我们以前的思维中,如果调用一个类时,我们都需要将其手动实例化,当我们创建被调用的工作不需要我们完成时,这就是控制反转,当这个将被调用的实例 ...

  10. 网络流——增广路算法(dinic)模板 [BeiJing2006]狼抓兔子

    #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #in ...