ASP网站制作之温顺的杀手――跨站ASP Script打击
写软件都是想的时间比写的时间要长的.如果反过来了就得看看是什么原因了.另外大家可以回去问问公司里的小MM.(一般企业里,跟你们交付软件接触得最多的是她们)打击 每当我们想到黑客的时分,黑客常常是如许一幅画像:一个伶仃的人,悄然进进他人的服务器中,举行损坏大概夺取他人的奥密材料。大概他会变动我们的主页,甚者会夺取客户的信誉卡号和暗码。别的,黑客还会打击会见我们网站的客户。与此同时,我们的服务器同样成了他的爪牙。微软称这类打击为“跨站script”打击。而这类打击年夜多半都产生在网站静态发生网页的时侯,但黑客的方针并非你的网站,而是扫瞄网站的客户。跨站script打击的申明
在一本名为<<ADVISORYCA--2000-02>>的杂志中,CERT告诫人人:假如服务器对客户的输出不举行无效考证,黑客就会输出一些歹意的HTML代码,当这些HTML代码输出是用于SCRIPT程序,他们就可以使用它来举行损坏,如拔出一些使人讨厌的图片或声响等,同时,也无能扰了客户准确扫瞄网页。
我们晓得,有些伴侣已经被引诱到一些可疑的收费网站,他们失掉的仅仅是10到20个小的窗口,这些窗口经常陪伴着由JAVA或JAVASCRIPT天生的生效安钮,这被称为鼠标圈套。封闭这些窗口是白费的,每当我们封闭一个窗口,又会有10几个窗口弹出。这类情形经常产生在办理员没在的时侯产生。鼠标事务是黑客使用跨站SCRIPT办法攻客户的典范典范。
歹意的标签和SCRIPT不但纯的开玩笑,他们乃至能够夺取材料和摧毁体系。一个伶俐的乃至是不敷伶俐的黑客都可以利用SCRIPT搅扰大概改动服务器数据的输出。使用SCRIPT代码也能打击客户体系,让你的硬盘尽损。并且你要晓得,在你一边利用服务器的时分,黑客的SCRIPT也正在你服务器里平安的中央运转着的呀!假如客户对你的服务器十分信认,一样他们也会信托那些歹意的SCRIPT代码。乃至这个代码是以〈SCRIPT〉大概〈OBJECT〉的情势来自黑客的服务器。
即便利用了防火墙(SSL)也不克不及避免跨站SCRIPT的打击。那是由于假如天生歹意SCRIPT代码的设备也利用了SSL,我们服务器的SSL是不克不及分辨出这些代码来的。我们岂非就如许把客户已经那末信托的网站拱手让给黑客吗?并且有这类损坏的存在,会让你网站信用尽损的。
1、跨站SCRIPT打击示例:
依据CERT的材料,静态输出大抵有这几种情势:URL参数,表格元素,COOKISE和数据哀求。让我们来剖析一下,这个只要两个页面的网站,网站名为:MYNICESITE.COM。第一页利用一张表格或COOKIE来猎取用户名:
<%@Language=VBScript%>
<%IfRequest.Cookies("userName")<>""Then
DimstrRedirectUrl
strRedirectUrl="page2.asp?userName="
strRedirectUrl=strRedirectUrl&Response.Cookies("userName")
Response.Redirect(strRedirectUrl)
Else%>
<HTML>
<HEAD>
<TITLE>MyNiceSite.comHomePage</TITLE>
</HEAD>
<BODY>
<H2>MyNiceSite.com</H2>
<FORMmethod="post"action="page2.asp">
EnteryourMyNiceSite.comusername:
<INPUTtype="text"name="userName">
<INPUTtype="submit"name="submit"value="submit">
</FORM>
</BODY>
</HTML>
<%EndIf%>
第二页前往用户名以示接待:
<%@Language=VBScript%>
<%DimstrUserName
IfRequest.QueryString("userName")<>""Then
strUserName=Request.QueryString("userName")
Else
Response.Cookies("userName")=Request.Form("userName")
strUserName=Request.Form("userName")
EndIf%>
<HTML>
<HEAD></HEAD>
<BODY>
<H3align="center">Hello:<%=strUserName%></H3>
</BODY>
</HTML>
当你一般常输出笔墨时,统统都很一般。假如你输出Script代码:<SCRIPT>alert(Hello.;</script>,JavaScript告诫标签就会弹出来:
在你下一次会见时,这个警示标签一样会呈现;这是由于这个Script代码在你第一次会见的时后就已留在cookie中了。这是一个复杂的跨站打击的典范。
假如你以为这是一个特别情形,你也无妨到网上其余中央看看,亲身试一下。我已经对一些年夜型的当局网站、教导网站和贸易网站进
行过测试,他们傍边切实其实有部分呈现了以上所说的情形,我乃至发明了我常常利用信誉卡的网站也竟然对输出不举行任何过滤,想一想真是可骇。
2、用E-Mail举行跨站Script打击
跨站script打击用在列表服务器,usenet服务器和邮件服务器来得出格简单。上面仍是以MyNiceSite.com网站为例举行申明。因为你常常扫瞄这个网站,它的内容也切实其实让你爱不爱不释手,因而在不知不觉中你就把扫瞄器的改成了老是信托这个静态网站内容的设置。
MyNiceSite.com网站老是经由过程出卖征订它们Email函件的邮箱地点来取得支出,这切实其实是一种不太好的举措。因而我买了它的一份邮箱地点。并发了大批的邮件给你们。在信中我告知你们尽快会见这个网站,并反省你们帐户利用的最新情形。为了让你们感应便利,我在这信中也作了链接。我在这链接URL中的username参数中舔加了script代码。有些客户在不知不觉中就点击了这个链接,也就是说上了我确当,同时我也从中失掉了优点:
它是如许事情的,当你点击这个链接的时后,在链接里的script代码就会引诱你所用扫瞄器往下载我的JavaScript程序并实行它。我的Script反省到你利用的是IE扫瞄器后,就动手下载ActiceX控件particularlyNasty.dll。由于之前你已把这个网站的内容以为老是平安的,如许,我的script代码和Active控件就可以在你呆板上无拘无束的运转了。
3、Activex打击申明
在会商ActiveX时,CERT和微软都没提到跨站script办法所带来的的伤害。W3C在<<平安罕见成绩解答>>中对ActiveX的平安成绩作了对照细致的申明。Javaapplet对体系的把持遭到严厉限定。SUN开辟它时就划定,只要那些对体系的平安不组成威逼的操纵才被同意运转。
在另外一方面,ActiveX对体系的操纵就没有严厉地被限定。假如一但被下载,就能够象安装的可实行程序一样做他们想干的事变。针对这一特性IE扫瞄器也作了某些限定,如关于那些不平安的站点,在它的默许设置中就会不同意你举行下载大概会给你告诫的提醒。正在基于ActiveX举行开辟的公司,如VeriSign公司,它们对ActiveX控件都给编了号。当你鄙人载控件的时后,IE扫瞄器会给你告诫并显现它的可托籁水平。由用户决意是不是信任这个控件。如许一来体系的平安性就增添了。
可是,关于那些没有几履历的用户来讲,他们常常不盲目地对本来的设置举行了修正,让这些控件在没有任何提醒的情形下就下载了。别的,对一个老手来讲,即便在有提醒的情形下也会不加思考地下载那些没作任何标志的控件。在我们所举的例子中,因为你对该站点的信托,改了扫瞄器的设置,如许,ActiveX控件在不经由任何提醒的情形下就下载,并在你的呆板上不知不觉地入手下手运转。
4、16进制编码的ActiveXScript打击
要把专心不良的标签和script辨别出来是一件十分坚苦的事。Script还能够16进制的情势把本人躲起来。让我们看看上面这个E-mail典范好吗?它是以16进制的情势被发送进来的:
这几近是一封完全的邮件,内里包括了以16进制假造的URL参数:sender=mynicesite.com。当用户点击链接时,用户的扫瞄器就会间接入手下手第一例所说的处置历程而弹出告诫窗口。
第二部分:跨站Script打击的防犯
1、怎样制止服务器遭到跨站Script的打击
值得光荣的是,避免跨站Script打击的手艺正趋于完美。今朝可接纳这几种体例来避免跨站Script的打击:
1.对静态天生的页面的字符举行编码
你们起首要接纳的就是对静态天生页面的字符举行编码,你必需如许做,否则黑客很有大概变动你的字符设置而容易地经由过程你的防地。假如我们的网站是个英语网站,如许只需我们把字符编码设成拉丁字符ISO-8859-1就好了,详细情形以下:
<METAhttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
2.过滤和限定一切输出的数据
这是避免跨站Script的打击的第二种办法,在举行登录的时侯,不要让那些特别的字符也输出出来。因而我们可在ONSUBMIT办法中到场JAVASCRIPT程序来完成这个功效。在本例中我们限定最多只能输出15个字符。如许能够制止那些较长的script的输出。
在<<KnowledgeBaseArticleQA252985>>这本书中微软供应了一个冗长的Javascript程序来完成对输出数据的过滤。我们也依据详细情形引进了这段代码用于我们的例子中,如:
functioncheckForm(){
document.forms.userName.value=_
RemoveBad(document.forms.userName.value);
returntrue;
}
//MICROSOFTSCODE
functionRemoveBad(strTemp){
strTemp=strTemp.replace(/</>/"//\%/;/(/)/&/+/-/g,"");
returnstrTemp;
}
用这个举措,能够过滤在输出中含有的这些字符:
%<>[]{};&+-"()
3.利用HTML和URL编码
只管利用下面所说的过滤和限定输出的举措是一种十分主要用进攻手腕,但它对我的这类接纳邮件体例的打击仍是力所不及。由于我把URL的参数间接放在邮件中。针对这类情形我们不能不接纳一种更无力的平安措施。假如我们用的ASP,办理起来绝对说来要简单很多。只需对静态天生的网页总举行HTML和URL编码就好了。针对我们例子中的情形,在第一输出页中我们对redirectURL作了以下修改:
strRedirectUrl=strRedirectUrl&_
server.URLEncode(Response.Cookies("userName"))
在实行页中我们到场:
strUserName=server.HTMLEncode(Request.QueryString("userName"))
和
strUserName=server.HTMLEncode(Request.Form("userName"))
微软保举对一切静态页面的输出和输入都应举行编码。乃至在对数据库数据的存进和掏出也应云云。如许你就可以在很年夜水平上制止跨站script的打击。
要做到这些还要在Page1.asp中到场:
<%@Language=VBScript%>
<%IfRequest.Cookies("userName")<>""Then
redirectifdetectthecookie
DimstrRedirectUrl
strRedirectUrl="page2.asp?userName="
strRedirectUrl=strRedirectUrl&_
server.URLEncode(Request.Cookies("userName"))
Response.Redirect(strRedirectUrl)
Else%>
<HTML>
<HEAD>
<METAhttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
<TITLE>MyNiceSite.comHomePage</TITLE>
</HEAD>
<scriptLANGUAGE="javascript">
<!--
functioncheckForm(){
document.forms.userName.value=
RemoveBad(document.forms.userName.value);
returntrue;
}
//******************************************************
//Programmer:NOTORIGINALCODE-COMESFROMMICROSOFT
//CodeSource:MicrosoftKnowledgeBaseArticleQ25z985
//Description:Removesbadcharacters.
//******************************************************
functionRemoveBad(strTemp){
strTemp=strTemp.replace(/</>/"//\%/;/(/)/&/+/-/g,"");
returnstrTemp;
}
//-->
</SCRIPT>
<BODY>
<BR>
<H2>MyNiceSite.com</H2>
<BR>
<FORMmethod="post"action="page2.asp">
EnteryourMyNiceSite.comusername:
<INPUTtype="text"name="userName"width="10"maxwidth="10">
<INPUTtype="submit"name="submit"value="submit">
</FORM>
</BODY>
</HTML>
<%endif%>
Page2.asp中加如:
<%@Language=VBScript%>
<%DimstrUserName
IfRequest.QueryString("userName")<>""Then
strUserName=server.HTMLEncode(Request.QueryString("userName"))
Else
Response.Cookies("userName")=Request.Form("userName")
strUserName=server.HTMLEncode(Request.Form("userName"))
EndIf%>
<HTML>
<HEAD>
<METAhttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
</HEAD>
<BODY>
<H3align="center">Hello:<%=strUserName%></H3>
</BODY>
</HTML>
如今因为这类打击遭到无效的防制。那于那些歹意的标签和Script被编码,他们就被以笔墨的情势展现了出来,以下图:
我们也可增添一个IIS组件用于过滤一切从静态输出中的特别字符。关于那些已做好的网站,接纳这类举措来避免跨站script的打击来得十分简单。我们的这个控件能拦阻来自ASP页面的REQUEST方针,可对表格,cookie,哀求字串和程序的内容举行检测:
我们也能够经由过程编写log文件的办法把统计数据到场这个组件中。每当一个客户输出一个不法字符时,这个组件会记下它的IP地点和工夫。概况请见DougDean的<<RollyourOwnIISApplicationonASPToday>>一文。
我们只需接纳一些复杂的步聚就可以无效地制止跨站script的打击。除以上所说的三种办法外,微软和CERT还激烈保举利用一种他们称之为“sanitycheck”的办法。比方,假定有个输出窗口只同意输出数字,我们就给它做个限制,只同意0-9数字的输出。微软和CERT所接纳的这类对输出的字符举行限制的举措要比独自的接纳过滤特别字符要好很多。接纳了这些措施后你就可以让那些观光你网站的客户在会见你网站时遭到回护。
2、免受黑客打击我们扫瞄器办法:
当你在网上周游的时侯,如何来制止遭到打击呢?微软和CERT倡议不要在网上胡碰乱闯。针对这类情形,PC杂志一个栏目标名叫JohnDvorack作者作了一个饶有乐趣的回覆。他以为这是微软公司一同有预谋的举动:就是用来吓唬网上冲浪的人到那些平安的站点往扫瞄,如美国在线和MSN.com网站。
在我们所举的例子中,即便你不在网上胡乱浪荡,也不克不及制止在网上遭到黑客的打击。具有取笑意义的是,年夜多半的伤害都来自于我们最信托的网站。假如要让网站必定不出成绩,你只好不下载任何静态内容大概任何cookie。预知概况请参阅扫瞄器的相干材料。
微软也告诫你们应把扫瞄器的ActiveScript设置成严厉限定的形态并把Email也设成严厉限定的吸收形式。在点击邮件中的链接时,必定要当心。如需进一步懂得情形请参阅一本名叫<<MicrosoftsKnowledgeBaseArticleQ253117>>的书。为了以防万一,你最好是多一点上彀履历,而且时候要胆小如鼠。
结论
假如你是之前的UNIX程序开辟职员,你大概不会晓得跨站script意谓着甚么。你晓得很多站点的办理职员登录的用户名和暗码分离为root,root.一样很多数据库办理员的称号和暗码分离为sa,password。你也晓得Webzine(如Phrack和Alt2600),根据他们所供应的办法能让你一步步地晓得某台服务器的缺点。在这类硬件上,你也晓得很多网站的数据库服务器和web服务器都没有举行自我回护。一但遭受黑客,呆板就得瘫痪。
只管我们很简单接纳避免体系遭到黑客的打击的措施,但我们的体系是一向表露在黑客眼前的。我们完整有来由信任下一年还会呈现一些新的平安毛病。在CERT公司JohnHoward师长教师引导下完成的一篇论文中曾提到:“跟据今朝的研讨显现,每一个在英特网上具有域名的网站均匀一年被黑客最少打击一次。”
对服务器来讲那怕只是一次这类打击也是不克不及接受的。跨站Script打击是黑客可接纳的另外一种办法。但我们只需举行以上所说的一些复杂的处置就可以避免这类情势打击的产生。
ASP.NET和ASP的比较,技术上比较已经没什么可说的了.新一代在大部分程度来说当然是比旧一代好了.关键看你对所做软件的理解了.因人而定.会写的话也可能比ASP.NET写得更有效率和更方便重用 ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。 先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习 我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标. 下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。 下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助... Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write 学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
页:
[1]