详细描述 | 跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息。用户在浏览网站、使用即时通讯软件、甚至在阅读电子邮件时,通常会点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息或在终端用户系统上执行恶意代码。 成功的跨站脚本攻击所带来的主要问题包括: 帐号劫持 - 攻击者可以在会话cookie过期之前劫持用户的会话,并以访问ULR用户的权限执行操作,如发布数据库查询并查看结果。 恶意脚本执行 - 用户可能在不知情的情况下执行攻击者注入到动态生成页面中的JavaScript、VBScript、ActiveX、HTML甚至Flash内容。 蠕虫传播 - 通过Ajax应用,跨站脚本可以以类似于病毒的方式传播。跨站脚本负载可以自动将其自身注入到页面中,并通过更多的跨站脚本轻易的重新注入同一主机,而 所有这些都无需手动刷新页面。因此,跨站脚本可以使用复杂的HTTP方式发送多个请求,并以用户不可视的方式自我传播。 信息窃取 - 攻击者可以通过重新定向和伪造站点将用户连接到攻击者所选择的恶意服务器并获得用户所输入的任何信息。 拒绝服务 - 通常攻击者通过在包含有跨站脚本漏洞的站点上使用畸形的显示请求,就可以导致主机站点反复的自我查询,出现拒绝服务的情况。 浏览器重新定向 - 在某些使用帧的站点上,用户可能在实际上已经被重新定向到恶意站点的情况下误导为仍处在原始站点上,因为浏览权地址栏中的URL仍保持不变。这是由于没有重新定向整个页面,而只是执行JavaScript的帧。 控制用户设置 - 攻击者可以恶意更改用户设置。 本漏洞属于Web应用安全常见漏洞。 |
解决办法 | 推荐措施包括实施安全编程技术确保正确过滤用户提供的数据,并编码所有用户提供的数据以防以可执行的格式向终端用户发送注入的脚本。 对于开发 ======== 可通过仔细验证所有输入和正确编码所有输出来防范跨站脚本攻击。可使用标准的ASP.NET验证控件或直接在代码中实施验证,要尽可能使用严格的模版。 输出编码要确保在将内容发送给客户端之前对任何可脚本化的内容都进行了正确的HTML编码。可通过HttpUtility.HtmlEncode函数实现,如以下Label控件示例所示: Label2.Text = HttpUtility.HtmlEncode(input) 要考虑用户输入通过应用可能用到的所有路径。例如,如果数据是由用户输入的,存储在数据库中,然后再重新显示,就必须要确保在每次检索的时候都能正确编 码。如果必须允许自由格式文本输入(如在消息板中),而又希望允许使用一些HTML格式,则可以通过仅明确允许很小的安全标签列表来安全的处理这种情况, 如下所示: C#示例: StringBuilder sb = new StringBuilder(HttpUtility.HtmlEncode(htmlInputTxt.Text)); sb.Replace("&lt;b&gt;", "<b>"); sb.Replace("&lt;/b&gt;", "</b>"); sb.Replace("&lt;i&gt;", "<i>"); sb.Replace("&lt;/i&gt;", "</i>"); Response.Write(sb.ToString()); VB.NET示例: Dim sb As StringBuilder = New StringBuilder( _ HttpUtility.HtmlEncode(input)) sb.Replace("&lt;b&gt;", "<b>") sb.Replace("&lt;/b&gt;", "</b>") sb.Replace("&lt;i&gt;", "<i>") sb.Replace("&lt;/i&gt;", "</i>") Response.Write(sb.ToString()) Java示例: public static String HTMLEncode(String aText){ final StringBuilder result = new StringBuilder(); final StringCharacterIterator iterator = new StringCharacterIterator(aText); char character = iterator.current(); while (character != CharacterIterator.DONE ){ if (character == '<') { result.append("&lt;"); } else if (character == '>') { result.append("&gt;"); } else if (character == '&') { result.append("&amp;"); } else if (character == '\"') { result.append("&quot;"); } else { //the char is not a special one //add it to the result as is result.append(character); } character = iterator.next(); } return result.toString(); } 以下建议可帮助构建能够抵御跨站脚本攻击的web应用。 定义允许的内容。确保web应用对所有输入参数(cookies、头、查询字符串、表单、隐藏字段等)验证严格定义的预期结果。 检查POST和GET请求的响应,确保返回内容是预期的且有效。 通过编码用户提供的数据从用户输入中删除冲突字符、括号、单双引号。这可以防范以可执行的方式向终端用户发送注入的脚本。 在可能的时候将所有客户端提供的数据仅限于字母数字的数据。使用这种过滤方案时,如果用户输入 了<script>alertdocumentcookie( 'aaa') </script>,就会被减少为scriptalertdocumentcookiescript。如果必须使用非字母数字字符,在 HTTP响应中使用之前将其编码为HTML实体,这样就无法将其用于修改HTML文档的结构。 使用双重用户认证机制而不是单重认证。 在修改或使用脚本之前确认其来源。 在自己的代码中使用时不要明确的信任任何来自他人的脚本,无论是从web下载还是来自熟人。 大多数服务器端脚本语言都提供了内嵌方式将输入变量的值转换为正确的不可解释HTML。应使用这种方式在将输入显示给客户端之前过滤所有输入。 PHP: string htmlspecialchars (string string [, int quote_style]) ASP / ASP.NET: Server.HTMLEncode (strHTML String) 对于安全操作 ============ 服务器端编码指的是首先通过编码函数发送所有的动态内容,使用所选择字符集中的代码替换Scripting标签,这可以帮助防范跨站脚本攻击。服务器端编码的缺点是可能耗费资源,对一些web服务器的性能产生负面影响。 如果必须允许站点用户使用HTML标签,如允许用户使用的格式化标签的公告栏,则应限制可使用的标签。创建可接受标签的列表,如粗体字、斜体字或下划线,并仅允许使用这些,拒绝任何其他标签。以下是一些可帮助检测跨站脚本的正则表达式。 简单跨站脚本攻击的正则表达式: /((\%3C)|<)((\%2F)|\/)*[a-z0-9\%]+((\%3E)|>)/ix 应如下将上述正则表达式添加到新的Snort规则: alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"NIICross-Site Scripting attempt"; flow:to_server,established;pcre:"/((\%3C)|<)((\%2F)|\/)*[a-z0-9\%]+((\%3E)|>)/i";classtype:Web-application-attack; sid:9000; rev:5;) 跨站脚本攻击的偏执行正则表达式: /((\%3C)|<)[^\n]+((\%3E)|>)/I 这条特征仅仅查找起始的HTML标签及其对等的16进制,之后的一个或多个字符为非换行符,再之后为结尾标签或其对等的16进制。这可能导致一些误报,具 体取决于Web应用和Web服务器的架构。但这种方式可以确保捕获任何攻击,甚至远程类似的跨站脚本攻击。对于公众方面,可以加强教育程序,帮助用户防范 可用于帐号劫持和其他形式身份窃取的在线欺诈,如网络钓鱼。 对于质量保证 ============ 修复跨站脚本漏洞最终要求基于代码的修复。“对于开发”和“对于安全操作”部分所述步骤可为开发人员提供修复这些问题所需的信息。以下步骤概括了如何对应用程序手动测试跨站脚本。 步骤1. 在浏览器中打开任意Web站点,查找可接受用户输入的位置,如搜索表单或某些登录页面。在搜索框中输入test并发送给Web服务器。 步骤2. 寻找返回类似于Your search for 'test' did not find any items或Invalid login test页面的WEB服务器。如果结果页面中出现了test,请继续。 步骤3. 如果要测试跨站脚本,在之前使用的同一搜索或登录框中输入<script>alert('hello')</script>字符串并发送给Web服务器。 步骤4. 如果服务器所响应的弹出框显示hello,则站点受跨站脚本影响。 步骤5. 即使步骤4失败,站点没有返回这条信息,仍可能存在风险。在浏览器中点击“查看源码”选项,查看Web页面的实际HTML代码。现在查找发送给服务器 的<script>字符串,如果在源码中看到整个<script>alert('hello')</script> 文本,则Web服务器受跨站脚本的影响。 |
- 浏览: 1504244 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
发表评论
-
客户端用https连接服务器的一点心得
2016-05-11 17:13 488转自:http://dannyyuan.blog.51ct ... -
解决PKIX:unable to find valid certification path to requested target 的问题
2016-05-11 17:11 883转自:http://blog.csdn.net/ ... -
cookie的secure、httponly属性设置
2014-03-04 16:19 17067转载自:http://www.cnblogs ... -
框架注入漏洞
2014-02-27 16:21 72412 详细描述 攻击者有可能注入含有恶 ... -
链接注入漏洞
2014-02-27 16:20 18643详细描述 “链接注入”是修改站点内容的行为,其方式为将外 ... -
XSS跨站脚本攻击在Java开发中防范的方法
2014-02-27 09:48 7704转自:http://hi.baidu.com/hkr_tam ... -
HTTP 1.1状态代码及其含义
2011-10-20 10:16 1440下表显示了常见 ... -
使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据
2010-03-03 17:00 2217上一章节讨论了如何 ... -
使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数据
2010-03-03 16:52 2800源自:http://www.cnblogs.com/chnk ... -
使用X.509数字证书加密解密实务(一)-- 证书的获得和管理
2010-03-03 16:40 3249源自:http://www.cnblogs.com/chnki ... -
X.509 数字证书结构和实例
2010-03-03 16:36 2927源自:http://www.cnblogs.com/chnki ... -
CA基本常识:X.509标准
2010-03-03 16:21 4640原文连接: http://www.cnblogs.com ... -
安全认证相关文档
2010-03-02 15:59 1053PKCS#11 中文手册 -
openssl使用手册
2009-08-04 10:28 7353OpenSSL有两种运行模式 ... -
JA-SIG(CAS)学习笔记1
2009-07-15 01:16 1322实验步骤: STEP 1,搭 ... -
公钥系统_数字签名_数字证书工作原理入门 (转)
2009-02-24 07:27 2103公钥系统 / 数字签名 / 数字证书工作原理入 ... -
详解公钥、私钥、数字证书的概念
2009-02-05 15:59 3402http://pepa.iteye.com/blog/2509 ... -
CA系统、证书常识
2009-02-05 15:58 14581.什么是CA CA是Certi ... -
密钥库文件格式(Keystore)和证书文件格式(Certificate)
2009-02-05 15:56 3153密钥库文件格式【Keystore】 格式 : ... -
java 项目的安全学习地址
2009-02-01 16:07 1452java 项目的安全学习地址: http://www.ja-s ...
相关推荐
新浪微博攻击事件跨网站脚本(Cross-sitescripting,通常简称为XSS或跨站脚本或跨站脚本攻击)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受...
SpringBoot +esapi 实现防止xss攻击 实战代码,真实有效
2. 请介绍一下常见的网络攻击类型,如 DDoS 攻击、SQL 注入、XSS 跨站脚本攻击等。 3. 什么是恶意软件(Malware)?请列举几种常见的恶意软件类型并说明其危害。 4. 什么是防火墙(Firewall)?请介绍防火墙的作用...
全部源代码,包含java后台代码,小程序... 完善的XSS防范及脚本过滤,彻底杜绝XSS攻击 日志分级输出,便于分析日志 前端使用Vue+iView,上手容易 后台演示地址 https://wuyuliang.xyz/platform-framework/login.html
完善的XSS防范及脚本过滤,彻底杜绝XSS攻击 Maven多项目依赖,模块及插件分项目,尽量松耦合,方便模块升级、增减模块。 国际化支持,服务端及客户端支持 完善的日志记录体系简单注解即可实现 支持服务监控,数据...
http://www.renren.io/项目演示地址:http://fast.demo.renren.io/#/login 账号密码admin/adminrenren-fast是一个轻量级的 Spring Boot 快速开发平台,能快速开发项目并交付【接私活利器】完善的 XSS 防范及脚本过滤...
第7章 XSS跨站脚本漏洞 129 7.1 XSS原理解析 129 7.2 XSS类型 130 7.2.1 反射型XSS 130 7.2.2 存储型XSS 131 7.2.3 DOM XSS 132 7.3 检测XSS 133 7.3.1 手工检测XSS 134 7.3.2 全自动检测XSS 134 7.4 XSS高级利用 ...
一个基于spring boot、spring oauth2.0、mybatis、redis的轻量级、前后端分离、防范xss攻击、拥有分布式锁,为生产环境多实例完全准备,数据库为b2b2c设计,拥有完整sku和下单流程的完全开源商城 pc:登录、注册、...
完善的XSS防范及脚本过滤,彻底杜绝XSS攻击(参考开源方案) 基于角色的权限管理,细分到按钮权限 基于Maven模块化开发,可快速实现个性化业务模块 技术方案 核心框架:Spring WEB框架:SpringMVC ORM框架:Mybatis ...
2.完善的XSS防范及脚本过滤,彻底杜绝XSS攻击 3.实现前后端分离,通过token进行数据交互 利用人人框架进行前后端分离项目应用,基础知识循序渐进,带着学员实操,学完可以上手演练,提高学习效率和节省学习时间。
renren-fast 是一个轻量级的 Spring Boot 快速开发平台,能快速开发项目并交付【接私活利器】 完善的 XSS 防范及脚本过滤,彻底杜绝 XSS 攻击,实现前后端分离,通过 token 进行数据交互 renren-fast-vue基于...
- 完善的XSS防范及脚本过滤,彻底杜绝XSS攻击 - 完善的代码生成机制,可在线生成entity、xml、dao、service、vue、sql代码,减少70%以上的开发任务 - 引入quartz定时任务,可动态完成任务的添加、修改、删除、暂停、...
renren-fast是一个轻量级的Spring Boot快速开发平台,能快速开发项目并交付【接私活 利器】 完善的XSS防范及脚本过滤,彻底杜绝XSS攻击 实现前后端分离,通过token进行数据交互 推荐使用阿里云服务器部署项目,免费...
代码生成、网页静态化、基于JQuery的Web2.0页面开发、AJAX、SEO、网站调优、采集器、RSS/XML、网站防黑(防XSS攻击、防注入漏洞攻击、防CC攻击、防挂马、防盗链、敏感词过滤、广告帖智能过滤)、IIS管理与调优、流量...
彻底杜绝XSS攻击支持分布式部署,session存储在redis中友好的代码结构及注释,便于阅读及二次开发引入quartz定时任务,可动态完成任务的添加、修改、删除、暂停、恢复及日志查看等功能页面交互使用Vue2.x,极大的...
基于Spring、Spring Boot、MyBatis、Shiro框架,,Spring Boot 快速开发平台,完善的 XSS 防范及脚本过滤,彻底杜绝 XSS 攻击,采用前后端分离技术实现 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集...
考虑用户上传租赁物品信息等场景,用户可能上传攻击脚本和敏感词,系统对敏感词和XSS攻击做出防范。使用面向切面编程技术,将安全防御的代码从业务代码中分离,对于需要防御的地方只需要加上注解,使用切面拦截做...
- 完善的XSS防范及脚本过滤,彻底杜绝XSS攻击 - 支持分布式部署,session存储在redis中 - 友好的代码结构及注释,便于阅读及二次开发 - 引入quartz定时任务,可动态完成任务的添加、修改、删除、暂停、恢复及日志...