首页 安全评测解决方案与代码编写规范

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

举报
开通vip

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

安全评测解决方案与代码编写规范
WEB安全评测解决方案与代码编写规范北京恒华伟业科技股份有限公司2013年10月目录lXss注入简介21.1—个简单的例子21.2网上的xss讲解32防御xss的七条原则92.1前言92.2原则1:不要在页面中插入任何不可信数据-除非这些数已经据根据下面几个原则讲行了编码102.3原则2:在将不可信数据插入到HTML标签之间时.对这些数据进行HTMLEntity编码112.4原则3:在将不可信数据插入到HTML属性里时.对这些数据进行HTML属性编码122.5原则4:在将不可信数据插入到SCRIPT里时.对这些数据进行SCRIPT编码142.6原则5:在将不可信数据插入到StyieS性里时,对这些数据进行CSS编码162.7原则6:在将不可信数据插入到HTMLURL里时.对这些数据进行URL编码172.8原则7:使用富文本时.使用XSS规则引擎进行编码过滤18项目中防御xss的具体措施213.1在isp中的输出防御213.1.1stu标签输出防御213.1.2Esap标签输出防御213.1.3Jav输出代码防御通过〈%=temp%〉的方式22防御url中的xss代码注入攻击办法23控制通过输入非登录页的url讲入系统功能245.1.1Refer验证过滤器245.1.2window.ope和Iwindow.location.hr特殊处理246系统日志组件的调用 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 256.1.方法一:直接调用256.1.2方法二1甬过Annotatio251Xss注入简介1.1一个简单的例子先看下现在frp登录页面的xss注入漏洞先打开系统登录页HYPERLINK"http://192.168.2.99:8080/scmm/"http://192.168.2.99:8080/scmm/然后在系统用户名中文本框中输入1,xss:*/-->'">;密码为1点击登录按钮,则出现如下界面原因是系统验证用户名失败后,重新跳转到login.jsp而login.js中通过${userCode}的方式对userCode变量进行了直接的页面输出,从而执行了不安全的脚本,正确的方式使应当对userCode进行字符编码转换后再进行输出,具体的编码转换输出方式,请参照第三章节再比如在一个博客添加页面blogAdd.js中有一个form表单
Form表单提交后跳转到bloglnfo.jsp如果在js中使用blog.subject如果我在from表单中blog.subje文本框中输入“varmyiframe=document.createEleme“nitf(rame”);myiframe.style.heig”h1t0=0px;”;myiframe.style.wid”t1h0=0px;”myiframe.src”=http://www.baidu.c”o;mdocument.getElementsByTagName(body)[0].appendChild(myiframe);则会成功在你的网站上显示出一个百度的页面,使用类似的代码可以实现网站钓鱼功能例如创建一个支付页面,引诱你把账号和密码输入到钓鱼网站中正确的做法是对用户输入blog.subje文本框中的值进行非法字符过滤后再保存到数据库或者在对blog.subje的字段值进行输出的时候进行字符转换转换方式是将VarblogSubject”=”;修改为VarblogSubject”=因为strut的propert标签默认只对输出的值进行html过滤,而不对javaScrii进行过滤1.2网上的xss讲解XSS漏洞概述:XSS(CrossSiteScript)跨站点脚本攻击是一种注射的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,在这种恶意脚本注入否则良性和信任的网站类型。跨站点脚本(XSS)攻击,攻击者使用时,会出现一个网络应用程序发送恶意代码,一般是在浏览器端脚本的形式,向不同的最终用户。这些缺陷,使攻击成功是相当普遍,发生在任何地方从一个Web应用程序使用在输出它没有验证或编码了用户输入。攻击者可以使用XSS的恶意脚本发送到一个毫无戒心的用户。最终用户的浏览有没有办法知道该脚本不应该信任,将执行该脚本。因为它认为该脚本来从一个受信任的源,恶意脚本可以访问任何Cookie,会话令牌,或其他敏感信息的浏览器保留,并与该网站使用。甚至可以重写这些脚本的HTML网页的内容。XSS漏洞历史:XSS(Cross-sitescripting)漏洞最早可以追溯到1996年,那时电子商务才刚刚起步,估计那时候国内很少人会想象到今天出现的几个国内电子商务巨头淘宝、当当、亚马逊(卓越)。XSS的出现“得益”于JavaScript的出现,JavaScript的出现给网页的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 带来了无限惊喜,包括今天风行的AJAX(AsynschronousJavaScriptandXML)。同时,这些元素又无限的扩充了今天的网络安全领域。XSS漏洞攻击特点:XSS跨站漏洞种类多样人:XSS攻击语句可插入到、URL地址参数后面、输入框内、img标签及DIV标签等HTML函数的属人里、Flash的getURL()动作等地方都会触发XSS漏洞。XSS跨站漏洞代码多样人:为了躲避转义HTML特殊字符函数及过滤函数的过滤,XSS跨站的代码使用“/”来代替安字符“””、使用Tab键代替空格、部分语句转找成16进制、添加特殊字符、改变大小写及使用空格等来绕过过滤函数。如果在您的新闻系统发现安全漏洞,如果该漏洞是一个SQL注入漏洞,那么该漏洞就会得到您的网站管理员密码、可以在主机系统上执行shell命令、对数据库添加、删除数据。如果在您的新闻或邮件系统中发现安全漏洞,如果该漏洞是—个XSS跨站漏洞,那么可以构造一些特殊代码,只要你访问的页面包含了构造的特殊代码,您的主机可能就会执行木马程序、执行'***Cookies代码、突然转到一个银行及其它金融类的网站、泄露您的网银及其它账号与密码等。XSS攻击原理:XSS属于被动式的攻击。攻击者先构造一个跨站页面,利用script、hellov=newActiveXObject("MSXML2.XMLHTTP.3.0");v.open("GET","HYPERLINK"http://xss.honkwin.com:8080/testxss/doadmin.jsp?v=hacked4"http://xss.honkwin.com:8080/testxss/doadmin.jsp?v=hacked4");v.send();alert(v.statusText);以普通用户身份修改uservalue为以上任何一个,当admin浏览index.jsp时,即可悄无声息的修改adminvalue这里演示了3种跨站手法:1是利用img、iframe等tag直接发起请求,这适用于无法直接出script的情况,其中HYPERLINK"http://bbs.honkwin.com/2xwfed"http://bbs.honkwin.com/2xwfed是一个redirect,扌指向HYPERLINK"http://xss.honkwin.com:8080/testxss/doadmin.jsp?v=hacked2"http://xss.honkwin.com:8080/testxss/doadmin.jsp?v=hacked2;2是用script提交post表单;3是ajax技术。以上攻击能够成功有2个原因:应用程序没有对uservalue做足够多的过滤,导致用户有机会构造一个复杂的跨站语句来触发admin的非预期行为;应用程序在响应adminvalue修改请求时没有防范措施来识别这是不是出于用户主动。漏洞1很容易修复,只要像防止SQLInjection那样对用户输入的所有内容都过滤即可。漏洞2才是问题的根源,即便我们修补了漏洞1,只要诱使admin用户访问包含〈imgsrc二"http://bbs.honkwin.com/2xwfed">的页面,仍然能达到目的,而这是一件极容易做到的事。防范措施:这里给出一些防范XSS攻击的措施。必须说明的是,对于XSS攻击,并不像SQLInjection那样可以有一劳永逸的解决方案只需要grep—下所有的sql调用。这是一场长期的斗争,而且往往需要我们采取修改业务流程、产品设计等看似削足适履的手段。先总结一下常见的攻击手法:依赖跨站漏洞,需要在被攻击网站的页面种入脚本的手法Cookie盗取,通过javascript获取被攻击网站种下的cookie,并发送给攻击者。从cookie中提取密码等隐私利用cookie伪造session,发起重放攻击Ajex信息盗取,通过javascript发起ajex请求。从ajex结果中获取隐私。模拟用户完成多页表单。不依赖跨站漏洞的手法单向HTTP动作,通过img.src等方法发起跨站访问,冒充被攻击者执行特权操作。但是很难拿到服务器的返回值。双向HTTP动作,如果服务器产生一段动态的script,那么可以用script.src的方法发起跨站访问并拿到服务器的返回值。防范手法如下:防堵跨站漏洞,阻止攻击者利用在被攻击网站上发布跨站攻击语句不可以信任用户提交的任何内容,首先代码里对用户输入的地方和变量都需要仔细检查长度和对”<”,”>”,”;”,”'”等字符做过滤;其次任何内容写到页面之前都必须加以encode,避免不小心把htmltag弄出来。这一个层面做好,至少可以堵住超过一半的XSS攻击。Cookie防盗首先避免直接在cookie中泄露用户隐私,例如email、密码等等。其次通过使cookie和系统ip绑定来降低cookie泄露后的危险。这样攻击者得到的cookie没有实际价值,不可能拿来重放。尽量采用POST而非GET提交表单POST操作不可能绕开javascript的使用,这会给攻击者增加难度,减少可利用的跨站漏洞。严格检查refer检查httprefer是否来自预料中的url。这可以阻止第2类攻击手法发起的http请求,也能防止大部分第1类攻击手法,除非正好在特权操作的引用页上种了跨站访问。将单步流程改为多步,在多步流程中引入效验码多步流程中每一步都产生一个验证码作为hidden表单元素嵌在中间页面,下一步操作时这个验证码被提交到服务器,服务器检查这个验证码是否匹配。首先这为第1类攻击者大大增加了麻烦。其次攻击者必须在多步流程中拿到上一步产生的效验码才有可能发起下一步请求,这在第2类攻击中是几乎无法做到的。引入用户交互简单的一个看图识数可以堵住几乎所有的非预期特权操作。只在允许anonymous访问的地方使用动态的javascript。对于用户提交信息的中的img等link,检查是否有重定向回本站、不是真的图片等可疑操作。内部管理网站的问题很多时候,内部管理网站往往疏于关注安全问题,只是简单的限制访问来源。这种网站往往对XSS攻击毫无抵抗力,需要多加注意。安全问题需要长期的关注,从来不是一锤子买卖oXSS攻击相对其他攻击手段更加隐蔽和多变,和业务流程、代码实现都有关系,不存在什么一劳永逸的解决方案。此外,面对XSS,往往要牺牲产品的便利性才能保证完全的安全,如何在安全和便利之间平衡也是一件需要考虑的事情。web应用开发者注意事项:1.对于开发者,首先应该把精力放到对所有用户提交内容进行可靠的输入验证上。这些提交内容包括URL、查询关键字、http头、post数据等。只接受在你所规定长度范围内、采用适当格式、你所希望的字符。阻塞、过滤或者忽略其它的任何东西。2•保护所有敏感的功能,以防被bots自动化或者被第三方网站所执行。实现session标记(sessiontokens)、CAPTCHA系统或者HTTP引用头检查。如果你的web应用必须支持用户提供的HTML,那么应用的安全性将受到灾难性的下滑。但是你还是可以做一些事来保护web站点:确认你接收的HTML内容被妥善地格式化,仅包含最小化的、安全的tag(绝对没有JavaScript),去掉任何对远程内容的引用(尤其是样式表和JavaScript)。为了更多的安全,请使用httpOnly的cookie。2防御xss的七条原则2.1前言本章节将会着重介绍防御XSS攻击的一些原则,需要读者对于XSS有所了解,至少知道XSS漏洞的基本原理,如果您对此不是特别清楚,请参考这两篇文章:《StoredandReflectedXSSAt》《(DOMBasedXSS》攻击者可以利用XSS漏洞向用户发送攻击脚本,而用户的浏览器因为没有办法知道这段脚本是不可信的,所以依然会执行它。对于浏览器而言,它认为这段脚本是来自可以信任的服务器的,所以脚本可以光明正大地访问Cookie,或者保存在浏览器里被当前网站所用的敏感信息,甚至可以知道用户电脑安装了哪些软件。这些脚本还可以改写HTML页面,进行钓鱼攻击。虽然产生XSS漏洞的原因各种各样,对于漏洞的利用也是花样百出,但是如果我们遵循本文提到防御原则,我们依然可以做到防止XSS攻击的发生。有人可能会问,防御XSS的核心不就是在输出不可信数据的时候进行编码,而现如今流行的Web框架(比如RailS大多都在默认情况下就对不可信数据进行了HTML编码,帮我们做了防御,还用得着我们自己再花时间研究如何防御XSS吗?答案是肯定的,对于将要放置到HTML页面body里的不可信数据,进行HTML编码已经足够防御XSS攻击了,甚至将HTML编码后的数据放到HTML标签(TAG)的属性(attribu)e里也不会产生XSS漏洞(但前提是这些属性都正确使用了引号),但是,如果你将HTML编码后的数据放到了〈SCRIPT>标签里的任何地方,甚至是HTML标签的事件处理属性里(如onmouseover),又或者是放到了CSS、URL里,XSS攻击依然会发生,在这种情况下,HTML编码不起作用了。所以就算你到处使用了HTML编码,XSS漏洞依然可能存在。下面这几条规则就将告诉你,如何在正确的地方使用正确的编码来消除XSS漏洞。2.2原则1:不要在页面中插入任何不可信数据,除非这些数已经据根据下面几个原则进行了编码第一条原则其实是“SecureByDefau”原则:不要往HTML页面中插入任何不可信数据,除非这些数据已经根据下面几条原则进行了编码。之所以有这样一条原则存在,是因为HTML里有太多的地方容易形成XSS漏洞,而且形成漏洞的原因又有差别,比如有些漏洞发生在HTML标签里,有些发生在HTML标签的属性里,还有的发生在页面的〈Script里,甚至有些还出现在CSS里,再加上不同的浏览器对页面的解析或多或少有些不同,使得有些漏洞只在特定浏览器里才会产生。如果想要通过XSS过滤器(XSSFilt)对不可信数据进行转义或替换,那么XSS过滤器的过滤规则将会变得异常复杂,难以维护而且会有被绕过的风险。所以实在想不出有什么理由要直接往HTML页面里插入不可信数据,就算是有XSS过滤器帮你做过滤,产生XSS漏洞的风险还是很高。〈script不要在这里直接插入不可信数据〈/scrip直接插入到SCRIPT标签里插入到HTML注释里〈div不要在这里直接插入不可信数据=””>
插入到HTML标签的属性名里〈divname=”不要在这里直接插入不可信数据”>〈/div>插入到HTML标签的属性值里>〈/a>〈不要在这里直接插入不可信数据href=””作为HTML标签的名字〈style不要在这里直接插入不可信数据直接插入到CSS里最重要的是,千万不要引入任何不可信的第三方JavaScrip到页面里,—旦引入了,这些脚本就能够操纵你的HTML页面,窃取敏感信息或者发起钓鱼攻击等等。2.3原则2:在将不可信数据插入到HTML标签之间时,对这些数据进行HTMLEntity编码在这里相当强调是往HTML标签之间插入不可信数据,以区别于往HTML标签属性部分插入不可信数据,因为这两者需要进行不同类型的编码。当你确实需要往HTML标签之间插入不可信数据的时候,首先要做的就是对不可信数据进行HTMLEntity编码。比如,我们经常需要往DIV,P,TD这些标签里放入—些用户提交的数据,这些数据是不可信的,需要对它们进行HTMLEntity编码。很多Web框架都提供了HTMLEntity编码的函数,我们只需要调用这些函数就好,而有些Web框架似乎更“智能”比如Rails它能在默认情况下对所有插入到HTML页面的数据进行HTMLEntity编码,尽管不能完全防御XSS,但着实减轻了开发人员的负担。〈body〉插入不可信数据前,对其进行HTMLEntity编码〈/body>〈div>插入不可信数据前,对其进〈/div>〈p)插入不可信数据前,对其进行HTMLEntity编码

以此类推,往其他HTML标签之间插入不可信数据前,对其进行HTMLEntity编码[编码规则]那么HTMLEntity编码具体应该做哪些事情呢?它需要对下面这6个特殊字符进行编码:&->&〈-><>->>”->"‘->'/->/有两点需要特别说明的是:不推荐将单引号(‘)编码为&apos;因为它并不是标准的HTML标签需要对斜杠号(/编码,因为在进行XSS攻击时,斜杠号对于关闭当前HTML标签非常有用推荐使用OWASP提供的ESAPI函数库,它提供了一系列非常严格的用于进行各种安全编码的函数。在当前这个例子里,你可以使用:StringencodedContent=ESAPI.encoder().encodeForHTML(request.getPar“amientpeurt”());2.4原则3:在将不可信数据插入到HTML属性里时,对这些数据进行HTML属性编码这条原则是指,当你要往HTML属性(例如width、name、value属性)的值部分(datavalU粛入不可信数据的时候,应该对数据进行HTML属性编码。不过需要注意的是,当要往HTML标签的事件处理属性(例如onmouseover)里插入数据的时候,本条原则不适用,应该用下面介绍的原则4对其进行JavaScript码。〈divatt插入不可信数据前,进行HTML属性编码>〈/div>g性值部分没有使用引号,不推荐〈divatt'插入不可信数据前,进行HTML属性编码'>
属性值部分使用了单引号
属性值部分使用了双引号[编码规则]除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为&#xHH;(以&#x开头,HH则是指该字符对应的十六进制数字,分号作为结束符)之所以编码规则如此严格,是因为开发者有时会忘记给属性的值部分加上引号。如果属性值部分没有使用引号的话,攻击者很容易就能闭合掉当前属性,随后即可插入攻击脚本。例如,如果属性没有使用引号,又没有对数据进行严格编码,那么一个空格符就可以闭合掉当前属性。请看下面这个攻击:假设HTML代码是这样的:content
攻击者可以构造这样的输入:xonmouseover=”javascript:alert(”/xss/)最后,在用户的浏览器里的最终HTML代码会变成这个样子:ss/)content只要用户的鼠标移动到这个DIV上,就会触发攻击者写好的攻击脚本。在这个例子里,脚本仅仅弹出一个警告框,除了恶作剧一下也没有太多的危害,但是在真实的攻击中,攻击者会使用更加具有破坏力的脚本,例如下面这个窃取用户cookie的XSS攻击:?x/>23varmessage=“<%=encodeJavaScript(@INPUT)%>”;45除此之外,往JavaScrip代码里其他任何地方插入不可信数据都是相当危险的,攻击者可以很容易地插入攻击代码。[编码规则]除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为\xHH(以\x开头,HH则是指该字符对应的十六进制数字)在对不可信数据做编码的时候,千万不能图方便使用反斜杠(\)对特殊字符进行简单转义,比如将双引号”转义成\”,这样做是不可靠的,因为浏览器在对页面做解析的时候,会先进行HTML解析,然后才是JavaScrip解析,所以双引号很可能会被当做HTML字符进行HTML解析,这时双引号就可以突破代码的值部分,使得攻击者可以继续进行XSS攻击。例如:假设代码片段如下:攻击者输入的内容为:\”;aler‘t(xss');//如果只是对双引号进行简单转义,将其替换成\”的话,攻击者输入的内容在最终的页面上会变成:?1浏览器在解析的时候,会认为反斜杠后面的那个双引号和第一个双引号相匹配,继而认为后续的alert‘xsS)是正常的JavaScrip脚本,因此允许执行。可以使用ESAPI提供的函数进行JavaScript码:StringencodedContent=ESAPI.encoder().encodeForJavaScript(request.ge“anpu”er(2.6原则5:在将不可信数据插入到Style厲性里时,对这些数据进行CSS编码当需要往styleshee,tyl标签或者StyieS性里插入不可信数据的时候,需要对这些数据进行CSS编码。传统印象里CSS不过是负责页面样式的,但是实际上它比我们想象的要强大许多,而且还可以用来进行各种攻击。因此,不要对CSS里存放不可信数据掉以轻心,应该只允许把不可信数据放入到CSS属性的值部分,并进行适当的编码。除此以外,最好不要把不可信数据放到一些复杂属性里,比如url,behavior等,只能被IE认识的Expression属性允许执行JavaScrip脚本,因此也不推荐把不可信数据放到这里。〈style>selector{prop”®入编码“}〈spanstyle”=property插:入不可信数据前,进行CSS编码”>〈/span>[编码规则]除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为\HH(以\开头,HH则是指该字符对应的十六进制数字)同原则2,原则3,在对不可信数据进行编码的时候,切忌投机取巧对双引号等特殊字符进行简单转义,攻击者可以想办法绕开这类限制。可以使用ESAPI提供的函数进行CSS编码:StringencodedContent=ESAPI.encoder().encodeForCSS(request.getPa“raimneptuet”r());2.7原则6:在将不可信数据插入到HTMLURL里时,对这些数据进行URL编码当需要往HTML页面中的URL里插入不可信数据的时候,需要对其进行URL编码,如下:LinkContent〈/a>[编码规则]除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为%HH(以%开头,HH则是指该字符对应的十六进制数字)在对URL进行编码的时候,有两点是需要特别注意的:URL属性应该使用引号将值部分包围起来,否则攻击者可以很容易突破当前属性区域,插入后续攻击代码不要对整个URL进行编码,因为不可信数据可能会被插入到href,src或者其他以URL为基础的属性里,这时需要对数据的起始部分的 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 字段进行验证,否则攻击者可以改变URL的协议,例如从HTTP协议改为DATA伪协议,或者javascrip伪协议。可以使用ESAPI提供的函数进行URL编码:StringencodedContent=ESAPI.encoder().encodeForURL(request.getPa“raimneptuet”r());ESAPI还提供了一些用于检测不可信数据的函数,在这里我们可以使用其来检测不可信数据是否真的是一个URL:StringuserProvidedURL=request.getParameter(“userProvidedURL”);booleanisValidURL=1ESAPI.validator().isValidInput(“URLContext”,userProvidedURL,2“URL”,255,false);345if(isValidURL){67”>}2.8原则7:使用富文本时,使用XSS规则引擎进行编码过滤Web应用一般都会提供用户输入富文本信息的功能,比如BBS发帖,写博客文章等,用户提交的富文本信息里往往包含了HTML标签,甚至是JavaScrip脚本,如果不对其进行适当的编码过滤的话,则会形成XSS漏洞。但我们又不能因为害怕产生XSS漏洞,所以就不允许用户输入富文本,这样对用户体验伤害很大。针对富文本的特殊性,我们可以使用XSS规则引擎对用户输入进行编码过滤,只允许用户输入安全的HTML标签,如〈b>,,〈等,对其他数据进行HTML编码。需要注意的是,经过规则引擎编码过滤后的内容只能放在〈div〉,&&qu‘->&#x/->〈inputtyp”tex”value='不可信数据”HTMLAttribut编&#xHH;/>码〈script>varmsg二"不可信数据"JavaScrip编码\xHH〈/script>〈/a〉URL编码%HH3项目中防御xss的具体措施3.1在jsp中的输出防御3.1.lstut标签输出防御如果此jsp是经过strut过滤器后返回的页面,则可以直接使用strut标签对于上面的原则4,需要在〈script〉〈/scri标签中输出的变量可以使用对于上面的原则2只需要在html标签中输出,则可以直接使用〈s:propertyvalu”eb=log.subje”ct/〉3・1・2Esapi标签输出防御如果此jsp是系统登陆页面,或者是其他未经过Strut过滤器的页面不能直接使用struts标签否则会抛出异常TheStrutsdispatchercannotbefound.ThisisusuallycausedbyusingStrutstagswithouttheassociatedfilter.Strutstagsareonlyusablewhentherequesthaspassedthroughitsservletfilter,whichinitializestheStrutsdispatcherneededforthistag.-[unknownlocation]org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60)org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44)org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:48)此时页面中变量的输出就不能使用struts标签,可以使用owasp-esapi开源项目中的标签owasp-esapi开源项目中的标签完全可以遵循上面的七个原则,而struts标签只能用来遵循原则2和原则3具体方法是首先在jsp中引入esapi的jsp自定义标签(esapi.tld文件中的标签),代码如下〈%@taglibprefix="es"uri="esapi"%〉然后对于原则2可以使用如下自定义el函数${es:encodeForHTML(userCode)}对于原则3可以使用自定义el函数${es:EncodeForHTMLAttributeTag(userCode)}每个原则和其对应方法的 表格 关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载 如下原则方法原则二${es:encodeForHTML(temp)}原则三${es:EncodeForHTMLAttributeTag(temp)}原则四${es:encodeForJavaScript(temp)}原则五${es:encodeForCSS(temp)}原则六${es:encodeForURL(temp)}3・1・Java输出代码防御通过<%=temp%>的方式如果不使用标签或el表达式需要通过〈%=temp%〉在页面上输出变量则可以先调用org.owasp.esapi.ESA的java类的方法进行转换后再输出原则ESAPI原则二ESAPI.encoder().encodeForHTML原则三ESAPI.encoder().encodeForHTMLAttribute原则四ESAPI.encoder().encodeJavaScript原则五ESAPI.encoder().encodeForCSS原则六ESAPI.encoder().encodeForURL4防御url中的xss代码注入攻击办法url的xss攻击代码代码示例如:HYPERLINK"http://localhost:8080/scmm/project/login/login.action?method=validateUser&usxesrsC:ode=1"http://localhost:8080/scmm/project/login/login.action?method=validateUser&usxesrsC:ode=1,*/-->'">;userCode在login.js上如果按照3.1章节的方式进行控制输出就已经能够防止此类攻击了,但是为了防止用户直接输入恶意url进行攻击的行为需要在项目中加一个过滤器判断用户是不是进行恶意攻击的过滤器具体方法验证queryStrin中是否有非法的字符如〈〉等非法字符,如果发现有此类非法字符则输出”E法的url请求,字样,queryString]验证可以设置一些ur啲白名单,从而允许一些特殊的url中可以有〈〉的字符。过滤器配置如下〈filter〉〈description〉请求参数中非法字符过滤器〈/description〉〈filter-name〉XSSCheckFilter〈/filter-name〉〈filter-class〉com.hhwy.iepip.framework.web.filter.XSSCheckFilter〈/filter-class〉〈init-param〉〈description〉白名单路径〈/description〉〈param-name〉excludePath〈/param-name〉〈param-value〉〈![CDATA[|]]〉〈/param-value〉〈/init-param〉〈/filter〉〈filter-mapping〉〈filter-name〉XSSCheckFilter〈/filter-name〉〈url-pattern〉*.action〈/url-pattern〉〈/filter-mapping〉〈filter-mapping〉〈filter-name〉XSSCheckFilter〈/filter-name〉〈url-pattern〉*.jsp〈/url-pattern〉〈/filter-mapping〉5控制通过输入非登录页的url进入系统功能5・1・IReferer验证过滤器现在用户登录系统后可以输入非登录页面的url进入系统,安全评测中要求控制此类行为,因此需要修改项目中验证session^过滤器此过滤器是先验证refere参数是否为空且是否与本系统同域,如果为空或者不同域则输出”非法的url请求”字样,控制和验证refere参数的代码在com.hhwy.iepip.commonbusiness.login.util.Session滤器中r如果开发阶段需要方便打开多个页签进行调试,可以在web.xml中设置canlnputUr参数为true即可5・1・2window.open和window.location.hre特殊处理因为过滤器中验证了header中refere是否存在,直接通过window.open方式打开窗□或者直接调用window.location.hr”f这种代码会丢失refere因此需要调用一个公共的js方法特殊处理一下例如通过隐藏的form表单提交的方式,或者通过隐藏的链接来新打开窗口,header中的refere才能存在,具体方式如下:在页面中引入scripttype="text/javascript"src="<%=basePath%>js/DynamicFormOrLink.js">scripttype="text/javascript"src="<%=basePath%>js/WindowBuilder.js">scripttype="text/javascript"src="<%=basePath%>js/sysHelper.js">如果引入了top.jsf」不用再引入上面三个js了然后当需要调用window.open时则改为调用openDynWin3,openDynWin3中的参数跟window.open的的参数顺序一样可以直接调用,也可以只传一个url给它,都没问题当调用window.location.href=XXXt需要调用dynOpenLocation(XXX);即可之前的jsp的代码中有很多window.open(XXX)和window.location.href=XX之类的代码,我已经做了兼容性处理,即通过一个中间的jsp中转了一下,因此这类代码依然能正常运行,但以后我们写代码就不要直接调用window.open(XXX)和window.location.href=XXXT6系统日志组件的调用方法新添加了一个系统日志工具类com.hhwy.iepip.framework.web.util.SysLogHelper可以通过下面方法来使用该工具,6.1.1方法一:直接调用SysLogHelper.insertSystemLog(StringlogContent,StringlogResult,Sti这个gTiOgDesc)上面三个参数的意义是logContent代表具体的日志内容可以随便定义,例如”修改了数据””添加了数据”logResult目前先限定两个取值SysLogHelper.INFO和SysLogHelper.ERRINFO代表程序代码正常执行,ERR代表
本文档为【安全评测解决方案与代码编写规范】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
天涯明月
暂无简介~
格式:doc
大小:105KB
软件:Word
页数:26
分类:
上传时间:2023-02-24
浏览量:2