web安全评测解决方案与代码编写规范.doc

上传人:sk****8 文档编号:3150360 上传时间:2019-05-23 格式:DOC 页数:27 大小:486KB
下载 相关 举报
web安全评测解决方案与代码编写规范.doc_第1页
第1页 / 共27页
web安全评测解决方案与代码编写规范.doc_第2页
第2页 / 共27页
web安全评测解决方案与代码编写规范.doc_第3页
第3页 / 共27页
web安全评测解决方案与代码编写规范.doc_第4页
第4页 / 共27页
web安全评测解决方案与代码编写规范.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、四川电科院信息系统 代码安全编写规范北京恒华伟业科技股份有限公司WEB 安全评测解决方案与代码编写规范北京恒华伟业科技股份有限公司2013 年 10 月四川电科院信息系统 代码安全编写规范北京恒华伟业科技股份有限公司目录1 Xss 注入简介 .21.1 一个简单的例子 .21.2 网上的 xss 讲解 .32 防御 xss 的七条原则 .92.1 前言 .92.2 原则 1:不要在页面中插入任何不可信数据,除非这些数已经据根据下面几个原则进行了编码 .102.3 原则 2:在将不可信数据插入到 HTML 标签之间时,对这些数据进行 HTML Entity 编码 .112.4 原则 3:在将不可

2、信数据插入到 HTML 属性里时,对这些数据进行 HTML 属性编码 122.5 原则 4:在将不可信数据插入到 SCRIPT 里时,对这些数据进行 SCRIPT 编码142.6 原则 5:在将不可信数据插入到 Style 属性里时,对这些数据进行 CSS 编码 .162.7 原则 6:在将不可信数据插入到 HTML URL 里时,对这些数据进行 URL 编码172.8 原则 7:使用富文本时,使用 XSS 规则引擎进行编码过滤 .183 项目中防御 xss 的具体措施 .213.1 在 jsp 中的输出防御 .213.1.1 stuts 标签输出防御 .213.1.2 Esapi 标签输出防

3、御 .213.1.3 Java 输出代码防御通过的方式 .224 防御 url 中的 xss 代码注入攻击办法 .235 控制通过输入非登录页的 url 进入系统功能 .245.1.1 Referer 验证过滤器 .245.1.2 window.open 和 window.location.href=特殊处理 .246 系统日志组件的调用方法 .256.1.1 方法一:直接调用 .256.1.2 方法二通过 Annotation.25四川电科院信息系统 代码安全编写规范北京恒华伟业科技股份有限公司 21 Xss 注入简介1.1 一个简单的例子先看下现在 frp 登录页面的 xss 注入漏洞先打

4、开系统登录页http:/192.168.2.99:8080/scmm/然后在系统用户名中文本框中输入1, xss: */“alert(/xsstest/);密码为 1点击登录按钮,则出现如下界面原因是系统验证用户名失败后,重新跳转到 login.jsp而 login.jsp 中通过$userCode的方式对 userCode 变量进行了直接的页面输出,从而执行了不安全的脚本,正确的方式使应当对 userCode 进行字符编码转换后再进行输出,具体的编码转换输出方式,请参照第三章节再比如在一个博客添加页面 blogAdd.jsp 中有一个 form 表单Form 表单提交后跳转到 blogInf

5、o.jsp如果在 js 中使用 blog.subjectVar blogSubject =”;四川电科院信息系统 代码安全编写规范北京恒华伟业科技股份有限公司 3如果我在 from 表单中 blog.subject 文本框中输入“ var myiframe=document.createElement(“iframe”);myiframe.style.height=”100px;”; myiframe.style.width=”100px;”myiframe.src=”http:/”;document.getElementsByTagName(body)0.appendChild(myifra

6、me);则会成功在你的网站上显示出一个百度的页面,使用类似的代码可以实现网站钓鱼功能例如创建一个支付页面,引诱你把账号和密码输入到钓鱼网站中正确的做法是对用户输入 blog.subject 文本框中的值进行非法字符过滤后再保存到数据库或者在对 blog.subject 的字段值进行输出的时候进行字符转换转换方式是将Var blogSubject =”;修改为Var blogSubject =”;因为 struts 的 property 标签默认只对输出的值进行 html 过滤,而不对 javaScript 进行过滤1.2 网上的 xss 讲解XSS 漏洞概述: XSS(Cross Site S

7、cript)跨站点脚本攻击是一种注射的问题,在这种恶意脚本注入否则良性和信任的网站类型。跨站点脚本(XSS)攻击,攻击者使用时,会出现一个网络应用程序发送恶意代码,一般是在浏览器端脚本的形式,向不同的最终用户。这些缺陷,使攻击成功是相当普遍,发生在任何地方从一个 Web应用程序使用在输出它没有验证或编码了用户输入。攻击者可以使用 XSS 的恶意脚本发送到一个毫无戒心的用户。最终用户的浏览有没有办法知道该脚本不应该信任,将执行该脚本。因为它认为该脚本来从一个受信任的源,恶意脚本可以访问任何 Cookie,会话令牌,或其他敏感信息的浏览器保留,并与该网站使用。 甚至可以重写这些脚本的 HTML 网

8、页的内容。 XSS 漏洞历史: XSS(Cross-site scripting)漏洞最早可以追溯到 1996 年,那时电子商务才刚刚起步,估计那时候国内很少人会想象到今天出现的几个国内电子商务巨头淘宝、当当、亚马逊(卓越)。XSS 的出现“得益”于 JavaScript 的出现,JavaScript 的出现给网页的设计带来了无限惊喜,包括今天风行的AJAX(Asynschronous JavaScript and XML)。同时,这些元素又无限的扩充了今天的网络安全领域。 XSS 漏洞攻击特点: (1)XSS 跨站漏洞种类多样人: XSS 攻击语句可插入到、URL 地址参数后面、输入框内、i

9、mg 标签及 DIV 标签等HTML 函数的属人里、Flash 的 getURL()动作等地方都会触发 XSS 漏洞。 (2)XSS 跨站漏洞代码多样人: 为了躲避转义 HTML 特殊字符函数及过滤函数的过滤,XSS 跨站的代码使用四川电科院信息系统 代码安全编写规范北京恒华伟业科技股份有限公司 4“/”来代替安字符“”、使用 Tab 键代替空格、部分语句转找成 16 进制、添加特殊字符、改变大小写及使用空格等来绕过过滤函数。 如果在您的新闻系统发现安全漏洞,如果该漏洞是一个 SQL 注入漏洞,那么该漏洞就会得到您的网站管理员密码、可以在主机系统上执行 shell 命令、对数据库添加、删除数据

10、。如果在您的新闻或邮件系统中发现安全漏洞,如果该漏洞是一个 XSS 跨站漏洞,那么可以构造一些特殊代码,只要你访问的页面包含了构造的特殊代码,您的主机可能就会执行木马程序、执行*Cookies 代码、突然转到一个银行及其它金融类的网站、泄露您的网银及其它账号与密码等。 XSS 攻击原理: XSS 属于被动式的攻击。攻击者先构造一个跨站页面,利用script、等各种方式使得用户浏览这个页面时,触发对被攻击站点的 http 请求。此时,如果被攻击者如果已经在被攻击站点登录,就会持有该站点 cookie。这样该站点会认为被攻击者发起了一个 http 请求。而实际上这个请求是在被攻击者不知情的情况下发

11、起的,由此攻击者在一定程度上达到了冒充被攻击者的目的。精心的构造这个攻击请求,可以达到冒充发文,夺取权限等等多个攻击目的。在常见的攻击实例中,这个请求是通过 script 来发起的,因此被称为 Cross Site Script。攻击 Yahoo Mail 的 Yamanner 蠕虫是一个著名的 XSS 攻击实例。Yahoo Mail 系统有一个漏洞,当用户在 web 上察看信件时,有可能执行到信件内的 javascript 代码。病毒可以利用这个漏洞使被攻击用户运行病毒的 script。同时 Yahoo Mail 系统使用了 Ajax 技术,这样病毒的 script 可以很容易的向 Yaho

12、o Mail 系统发起 ajax 请求,从而得到用户的地址簿,并发送病毒给他人。 XSS 攻击主要分为两类:一类是来自内部的攻击,主要指的是利用 WEB 程序自身的漏洞,提交特殊的字符串,从而使得跨站页面直接存在于被攻击站点上,这个字符串被称为跨站语句。这一类攻击所利用的漏洞非常类似于 SQL Injection 漏洞,都是 WEB 程序没有对用户输入作充分的检查和过滤。上文的Yamanner 就是一例。 另一类则是来来自外部的攻击,主要指的自己构造 XSS 跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个跨站网页放在自己的服务器上,然后通过结合其它

13、技术,如社会工程学等,欺骗目标服务器的管理员打开。这一类攻击的威胁相对较低,至少 ajax 要发起跨站调用是非常困难的。 案例实战: 我们来看一个简单的攻击实例,下表给出了一个简单的网站http:/:8080/testxss,该网站的密码和用户名相同,普通用户可以修改 user value,当以 admin 身份登陆时可以通过向 doadmin.jsp 发起请求来修改 admin value。 index.jsp Current User: $username 四川电科院信息系统 代码安全编写规范北京恒华伟业科技股份有限公司 5Admin Value: $adminvalue User Val

14、ue: $uservalue logout Login: username: password: password = username :-) adminvalue: uservalue: login.jsp doadmin.jsp 容易想到,只要诱骗 admin 用户发起一个到http:/:8080/testxss/doadmin.jsp 的 http 请求,就能成功攻击。因此我们设计跨站语句如下: hello hello document.forms0.submit() hello v = new ActiveXObject(“MSXML2.XMLHTTP.3.0“); v. open(

15、“GET“,“http:/:8080/testxss/doadmin.jsp?v=hacked4“); v.send();alert(v.status Text);以普通用户身份修改 user value 为以上任何一个,当 admin 浏览 index.jsp 时,即可悄无声息的修改 admin value 这里演示了 3 种跨站手法: 1 是利用 img、iframe 等 tag 直接发起请求,这适用于无法直接出 script 的情况,其中 http:/ 是一个 redirect,指向 http:/:8080/testxss/doadmin.jsp?v=hacked2 ; 2 是用 scr

16、ipt 提交 post 表单; 3 是 ajax 技术。 以上攻击能够成功有 2 个原因: 1. 应用程序没有对 user value 做足够多的过滤,导致用户有机会构造一个复杂的跨站语句来触发 admin 的非预期行为; 2. 应用程序在响应 admin value 修改请求时没有防范措施来识别这是不是出于用户主动。 漏洞 1 很容易修复,只要像防止 SQL Injection 那样对用户输入的所有内容都过滤即可。 漏洞 2 才是问题的根源,即便我们修补了漏洞 1,只要诱使 admin 用户访问包含 的页面,仍然能达到目的,而这是一件极容易 做到的事。 四川电科院信息系统 代码安全编写规范北

17、京恒华伟业科技股份有限公司 7防范措施: 这里给出一些防范 XSS 攻击的措施。必须说明的是,对于 XSS 攻击,并不像SQLInjection 那样可以有一劳永逸的解决方案只需要 grep 一下所有的sql 调用。这是一 场长期的斗争,而且往往需要我们采取修改业务流程、产品设计等看似削足适履的手段。 先总结一下常见的攻击手法: 1. 依赖跨站漏洞,需要在被攻击网站的页面种入脚本的手法 1.1. Cookie 盗取,通过 javascript 获取被攻击网站种下的 cookie,并发送给攻击者。 1.1.1. 从 cookie 中提取密码等隐私 1.1.2. 利用 cookie 伪造 sess

18、ion,发起重放攻击 1.2. Ajex 信息盗取,通过 javascript 发起 ajex 请求。 1.2.1. 从 ajex 结果中获取隐私。 1.2.2. 模拟用户完成多页表单。 2. 不依赖跨站漏洞的手法 2.1. 单向 HTTP 动作,通过 img.src 等方法发起跨站访问,冒充被攻击者执行特权操作。但是很难拿到服务器的返回值。 2.2. 双向 HTTP 动作,如果服务器产生一段动态的 script,那么可以用script.src 的方法发起跨站访问并拿到服务器的返回值。 防范手法如下: 1. 防堵跨站漏洞,阻止攻击者利用在被攻击网站上发布跨站攻击语句不可以信任用户提交的任何内容

19、,首先代码里对用户输入的地方和变量都需要仔细检查长度和对”,”;”,”等字符做过滤;其次任何内容写到页面之前都必须加以 encode,避免不小心把 html tag 弄出来。这一个层面做好,至少可以堵住超过一半的 XSS 攻击。 2. Cookie 防盗 首先避免直接在 cookie 中泄露用户隐私,例如 email、密码等等。其次通过使cookie 和系统 ip 绑定来降低 cookie 泄露后的危险。这样攻击者得到的cookie 没有实际价值,不可能拿来重放。 3. 尽量采用 POST 而非 GET 提交表单 POST 操作不可能绕开 javascript 的使用,这会给攻击者增加难度,减

20、少可利用的 跨站漏洞。 4. 严格检查 refer 检查 http refer 是否来自预料中的 url。这可以阻止第 2 类攻击手法发起的http 请求,也能防止大部分第 1 类攻击手法,除非正好在特权操作的引用页上种了跨站访问。 5. 将单步流程改为多步,在多步流程中引入效验码 多步流程中每一步都产生一个验证码作为 hidden 表单元素嵌在中间页面,下一步操作时这个验证码被提交到服务器,服务器检查这个验证码是否匹配。 首先这为第 1 类攻击者大大增加了麻烦。其次攻击者必须在多步流程中拿到上四川电科院信息系统 代码安全编写规范北京恒华伟业科技股份有限公司 8一步产生的效验码才有可能发起下一

21、步请求,这在第 2 类攻击中是几乎无法做到的。 6. 引入用户交互 简单的一个看图识数可以堵住几乎所有的非预期特权操作。 7. 只在允许 anonymous 访问的地方使用动态的 javascript。 8. 对于用户提交信息的中的 img 等 link,检查是否有重定向回本站、不是真的图片等 可疑操作。 9. 内部管理网站的问题 很多时候,内部管理网站往往疏于关注安全问题,只是简单的限制访问来源。这种网站往往对 XSS 攻击毫无抵抗力,需要多加注意。安全问题需要长期的关注,从来不是一锤子买卖。XSS 攻击相对其他攻击手段更加隐蔽和多变,和业务流程、代码实现都有关系,不存在什么一劳永逸的解决方

22、案。此外,面对XSS,往往要牺牲产品的便利性才能保证完全的安全,如何在安全和便利之间平衡也是一件需要考虑的事情。 web 应用开发者注意事项: 1.对于开发者,首先应该把精力放到对所有用户提交内容进行可靠的输入验证上。这些提交内容包括 URL、查询关键 字、http 头、post 数据等。只接受在你所规定长度范围内、采用适当格式、你所希望的字符。阻塞、过滤或者忽略其它的 任何东西。 2.保护所有敏感的功能,以防被 bots 自动化或者被第三方网站所执行。实现 session 标记(session tokens)、 CAPTCHA 系统或者 HTTP 引用头检查。 3.如果你的 web 应用必须

23、支持用户提供的 HTML,那么应用的安全性将受到灾难性的下滑。但是你还是可以做一些事来 保护 web 站点:确认你接收的 HTML 内容被妥善地格式化,仅包含最小化的、安全的 tag(绝对没有 JavaScript),去掉任何 对远程内容的引用(尤其是样式表和 JavaScript)。为了更多的安全,请使用httpOnly 的 cookie。四川电科院信息系统 代码安全编写规范北京恒华伟业科技股份有限公司 92 防御 xss 的七条原则2.1 前言 本章节将会着重介绍防御 XSS 攻击的一些原则,需要读者对于 XSS 有所了解,至少知道 XSS 漏洞的基本原理,如果您对此不是特别清楚,请参考这

24、两篇文章: Stored and Reflected XSS Attack DOM Based XSS攻击者可以利用 XSS 漏洞向用户发送攻击脚本,而用户的浏览器因为没有办法知道这段脚本是不可信的,所以依然会执行它。对于浏览器而言,它认为这段脚本是来自可以信任的服务器的,所以脚本可以光明正大地访问 Cookie,或者保存在浏览器里被当前网站所用的敏感信息,甚至可以知道用户电脑安装了哪些软件。这些脚本还可以改写 HTML 页面,进行钓鱼攻击。虽然产生 XSS 漏洞的原因各种各样,对于漏洞的利用也是花样百出,但是如果我们遵循本文提到防御原则,我们依然可以做到防止 XSS 攻击的发生。有人可能会问

25、,防御 XSS 的核心不就是在输出不可信数据的时候进行编码,而现如今流行的 Web 框架(比如 Rails)大多都在默认情况下就对不可信数据进行了 HTML 编码,帮我们做了防御,还用得着我们自己再花时间研究如何防御 XSS 吗?答案是肯定的,对于将要放置到 HTML 页面 body里的不可信数据,进行 HTML 编码已经足够防御 XSS 攻击了,甚至将HTML 编码后的数据放到 HTML 标签(TAG)的属性( attribute)里也不会产生 XSS 漏洞(但前提是这些属性都正确使用了引号) ,但是,如果你将HTML 编码后的数据放到了标签里的任何地方,甚至是 HTML 标签的事件处理属性里(如 onmouseover) ,又或者是放到了 CSS、URL 里,XSS 攻击依然会发生,在这种情况下, HTML 编码不起作用了。所以就算你到处使用了 HTML 编码,XSS 漏洞依然可能存在。下面这几条规则就将告诉你,如何在正确的地方使用正确的编码来消除 XSS 漏洞。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 建筑建材

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。