XSS完全解决方案
xss
为什么不能阻止用户输入不安全数据
比如用户想发一篇标题的文章 1+1>2吗?
为什么不在数据库存的时候就处理好或者接口里处理好
1<2 会被转义为 1<2,放到html中确实可以正常显示为 1<2,但如果要把它alert出来就还是1<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><script>alert(1);</script></p>
在浏览器上的表现:
<script>alert(1);</script>
html转义
为什么要转义
- 为了能让
html解释器可以解析出正确的页面 - 就像在字符串中不可以直接输入
"而得输入\"(不然字符串就断开了),在html中也得转义部分字符:\/''""<<>>&&
假设我们要输出一个</p>字符串到页面,那html就会是:
<p></p></p>显然是不行的<p></p></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&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="&"><</div>
$('#d').text(); // "<"
$('#d').html(); // "<"
$('#d').data('text'); // "&"
XSS完全解决方案的更多相关文章
- 防止 XSS 攻击 解决方案
XSS又叫CSS英文缩写为Cross Site Script中文意思为跨站脚本攻击具体内容指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执 ...
- 安全漏洞系列(一)---XSS漏洞解决方案(C# MVC)
参考地址:https://www.cnblogs.com/sagecheng/p/9462239.html 测试项目:MVCDemo 一.XSS漏洞定义 XSS攻击全称跨站脚本攻击,它允许恶意web用 ...
- XSS漏洞解决方案之一:过滤器
一:web.xml文件 <!-- 解决xss漏洞 --> <filter> <filter-name>xssFilter</filter-name> ...
- Xss问题解决方案
xss跨站脚本攻击问题最主要是呈现在html页面的脚本被执行导致的结果,可分为两个方便作屏蔽 后台屏蔽 在前端上传的各个参数后,对其进行转义后再保存至数据库,属于暴力式转义,一般不建议.下面是写的例子 ...
- js对HTML字符转义与反转义
注意: 在编写html时,经常需要转义,才能正常显示在页面上. 并且,还可以防止xss. 解决方案: 一, 使用正则: 使用正则转码: var value = document.getElementB ...
- 百度编辑器上传视频以及视频编辑器预览bug解决
百度编辑器目前来讲是运用比较广泛的一个编辑器了,不仅开源还有中文的文档,所以很受欢迎,不过里面也有许多地方需要开发人员自己调试,其中一个比较常见的问题就是上传视频了,上传视频本身有一些小bug,这个基 ...
- Cross-Site Scripting: Reflected
首先贴解决办法吧,解决了我项目中的问题,不一定适用所有情况. //For Cross-Site Scripting: Reflected public static String filter(Str ...
- XSS(跨站脚本攻击)漏洞解决方案
首先,简单介绍一下XSS定义: 一 . XSS介绍 XSS是跨站脚本攻击(Cross Site Scripting)的缩写.为了和层叠样式表CSS(Cascading Style Sheets)加以区 ...
- XSS 跨站脚本攻击 的防御解决方案
虽然说在某些特殊情况下依然可能会产生XSS,但是如果严格按照此解决方案则能避免大部分XSS攻击. 原则:宁死也不让数据变成可执行的代码,不信任任何用户的数据,严格区数据和代码. XSS的演示 Exam ...
随机推荐
- android键盘事件
在main.xml文件中代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...
- VMware Virtual Machine安装报错解决1
安装完VMware virtual machine 后,再进行 "create a new virtual machine"最后点击"Finish"时,报如下错 ...
- compass的使用
compass常用的一些命令 compass create 创建新Compass项目 compass init 为已存在项目添加compass compass clean 移动已生成的文件和缓存 c ...
- python 下的数据结构与算法---3:python内建数据结构的方法及其时间复杂度
目录 一:python内部数据类型分类 二:各数据结构 一:python内部数据类型分类 这里有个很重要的东西要先提醒注意一下:原子性数据类型和非原子性数据类型的区别 Python内部数据从某种形式上 ...
- Resharper
http://baike.baidu.com/link?url=H8DVtrvKV1Cg-Hrz82C6ZiJOUXbi_3BfoROe-RlHhctPna4-BFfglPh2OsR-KmCqRZ7_ ...
- WPF采用MVVM模式(绑定:纯前台、命令:触发器绑定命令)
MVVM绑定 view-viewModel-model,模型介绍省略,就是创建类,添加字段封装属性.注:控件的绑定只能绑定到属性上,不能绑定到字段上: 接下来就是代码 (view): <Wind ...
- ubuntu 安装RPM软件包
red hat 系统用rpm格式的文件安装软件,ubuntu安装软件是用deb格式的文件安装 在ubuntu上安装rmp文件格式的软件包步骤: 1.安装转换软件 alien(需要联网) apt-get ...
- n行m列的网格中含有的矩形数
给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形 公式:[ n(n+1)*m(m+1)]/4 直接想问题比较复杂,可以先考虑矩形的长,再考虑矩形的高,由对称性可知最后的结果中m和n对称 ...
- Objective-C中instancetype和id的区别
要区分instancetype和id,首先要弄清楚什么是关联返回类型(Related Result Type). 关联返回类型即一个方法的返回类型就是调用这个方法的调用者的类型.具有下列条件的方法具有 ...
- Mysql创建函数出错
目前在项目中,执行创建mysql的函数出错, mysql 创建函数出错信息如下: Error Code: 1227. Access denied; you need (at least one of) ...