阻止攻击的常用方法是:在将HTML返回给Web浏览器之前,对攻击者输入的HTML进行编码。HTML编码使用一些没有特定HTML意义的字符来代替那些标记字符(如尖括号)。这些替代字符不会影响文本在web浏览器上的显示方式,仅仅用于阻止HTML渲染引擎将数据识别成HTML标记。这种方法能阻止一些XSS攻击,但是以下几种情况例外:

在Script块中插入:

<script>
...
var strEmailAdd = 'attacker data';
...
</script>

在这个例子中,数据本身就已经在script块中了,攻击者要做的就是关闭引用标记。

...
var strEmailAdd = '';alert('Hi');//
...

引号加分号结束,最后可以注释掉其他输出内容避免出现阻止脚本运行的语法错误。

使用事件:

在HTML中,标记的属性能够被封装在单引号和双引号中,或者不需要引号。如果HTML的设计人员没有使用双引号来封装属性值,并对用户的数据进行了HTML编码,那么,这些不可信的数据会被限制在标记的范围内,而不是限制在属性的范围内。大部分的标记有事件发生的时候,用户定义的与那个事件相关联的脚本就会运行。

如果不可信数据经过HTML编码,并且在HTML中返回如下内容的时候,脚本仍然能够运行:

<INPUT name="txtinput" type="text" value='unTrustData'>

如果 OurData' onclick=alert(Hi) junk=' 作为不可信数据发送,将会返回如下所示HTML:

<INPUT name="txtinput" type="text" value=' OurData' onclick=alert('Hi') junk=''>

当用户单击文本框时,onclick事件就被激发了,脚本就会运行。

使用Style:

Style中的表达式能够被用来运行任意脚本,例如:

<INPUT name="txtinput" type="text" value="SomeValue" style="font-family:expression(alert('Hi'))">

脚本协议:

通过IMG标记中src属性值的形式,将它们返回。

<IMG src="untrusted data">

 两种不同过滤的例子:

1.在返回数据前,删除输入中的字符串。但是如果输入scriscriptpt,删除后剩下的就是script。

2.通过转义来阻止分隔属性。

深入理解浏览器中的解析器:在<script>和</script>之间的任何东西都会被当作脚本,并对它们进行语法检查。

<script>
var strMyVar = '</script><script>alert('快船总冠军')</script>';
...
</script>

浏览器会把上述内容解释为两个<script>块,第一个块有语法错误,并且不会运行。但是第二个块语法正确会运行。

 

绕过用编码方式阻止XSS攻击的几个例子的更多相关文章

  1. WEB安全测试之XSS攻击

    目录结构 1.背景知识 2.XSS漏洞的分类 3.XSS防御 4.如何测试XSS漏洞 5.HTML Encode 6.浏览器中的XSS过滤器 7.ASP.NET中的XSS安全机制 一.背景知识 1.什 ...

  2. XSS 攻击的防御

    xss攻击预防,网上有很多介绍,发现很多都是只能预防GET方式请求的xss攻击,并不能预防POST方式的xss攻击.主要是由于POST方式的参数只能用流的方式读取,且只能读取一次,经过多次尝试,自己总 ...

  3. 使用 PHP 构建的 Web 应用如何避免 XSS 攻击

    本文首先简单介绍开发测试人员如何对 Web 应用进行 XSS 漏洞测试,如何借助工具绕过客户端 JavaScript 校验输入恶意数据:然后针对使用 PHP 语言构建的 Web 站点,从在输出端对动态 ...

  4. [oldboy-django][2深入django]xss攻击 + csrf

    1 xss攻击 xss攻击(跨站脚本攻击,用户页面提交数据来盗取cookie) - 慎用safe, 和mark_safe -- 如果要用,必须要过滤 - 定义: 用户提交内容,在页面展示用html显示 ...

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

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

  6. WEB安全实战(二)带你认识 XSS 攻击

    前言 上一篇文章写了关于 WEB 安全方面的实战,主要是解决 SQL 盲注的安全漏洞.这篇文章本来是要写一篇关于怎样防治 XSS 攻击的,可是想来想去,还是决定先从理论上认识一下 XSS 吧.下一篇文 ...

  7. 跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击

    跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击 一.总结 一句话总结:比如用户留言功能,用户留言中写的是网页可执行代码,例如js代码,然后这段代码在可看到这段留言的不同一户的显示上就会 ...

  8. [BUGCASE]CI框架的post方法对url做了防xss攻击的处理引发的文件编码错误

    一.问题描述 出现问题的链接: http://adm.apply.wechat.com/admin/index.php/order/detail?country=others&st=1& ...

  9. WEB安全实战(五)XSS 攻击的第二种解决方式(推荐)

    序 说到 XSS 攻击,前边已经有两篇文章在讲这个事了,这次又拿出来说,主要是针对近期工作中的一些新的问题.那么之前是怎么解决问题的呢?为什么又要换解决方式?以下就具体的跟大家分享一下. 旧方案 公司 ...

随机推荐

  1. 【转】Nginx学习---深入浅出Nginx的介绍

    [原文]https://www.toutiao.com/i6595428119933354500/ Nginx是一款轻量级的Web服务器.反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在 ...

  2. ArcGIS Earth1.9最新版安装和使用教程

    1.下载ArcGIS Earth 官网下载地址:https://www.esri.com/en-us/arcgis/products/arcgis-earth 在这个网页的最下面填上信息,就可以下载了 ...

  3. SDN期末

    一.项目描述 负载均衡程序 二.小组分工 组名:我们真的很弱 组员:李佳铭.吴森杰.张岚鑫.薛宇涛.杨凌澜 三.代码演示及过程描述 四.课程总结

  4. 页面元素固定在页面底部的纯css代码(兼容IE6)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. linux下的“定时器”:crontab

    1.概述 crontab是用来设置在固定时间点或时间间隔执行某条指令,类似于时程表.使用-u user是指定user用户的时程表. 2.参数 -e[UserName] :调出编辑器,编辑定时任务,打开 ...

  6. Nowcoder 提高组练习赛-R7

    Nowcoder 提高组练习赛-R7 https://www.nowcoder.com/acm/contest/179#question 中间空了两场,因为实在是太难了... 第五场的第二题好像还比较 ...

  7. MD5+DES在C#.NET与Java/Android中的加解密使用

    一.背景后台(C#.NET)使用一个MD5+DES的加解密算法,查了下,很多网友都使用了这个算法.在Android里,也需要这个算法,如何把这个加解密算法切换成Java版,成了难题.毕竟好久没涉及到这 ...

  8. MetaMask/provider-engine-2-代码

    package.json "main": "index.js", "scripts": { "test": " ...

  9. shiro实战系列(十三)之单元测试

    由于我们已经涉及到了 Subject reference,我们知道 Subject 是“当前执行”用户的特定安全视图,且该 Subject 实 例绑定到一个线程来确保我们知道在线程执行期间的任何时间是 ...

  10. Android Bundle传递对象

    首先Android的Bundle是可以传递对象的.我们可以用Bundle b = new Bundle():b.putSerializable("key", 对象引用); 但是这样 ...