ASP网页设计跨站Script进击(三)
强大的可扩展性。ASP具有强大的扩展性,可以实现与多种网络、硬件设备的连接:通过专用的通讯线路远程接入企业; 通过远程拨号服务器为远程拨号客户提供服务;通过WAP为移动电话互联网客户服务。 跨站Script进击(三)第二局部:跨站Script进击的防犯
1、若何防止办事器遭到跨站Script的进击
值得光荣的是,避免跨站Script进击的手艺正趋于完美。今朝可接纳这几种体例来避免跨站Script的进击:
1.对静态生成的页面的字符停止编码
2.对输出停止过滤和限制
3.利用HTML和URL编码
1.对静态生成的页面的字符停止编码
你们起首要采取的就是对静态生成页面的字符停止编码,你必需如许做,否则黑客很有能够更改你的字符设置而等闲地经由过程你
的防地。假如咱们的网站是个英语网站,如许只需咱们把字符编码设成拉丁字符ISO-8859-1就好了,详细情形以下:
<META http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
2.过滤和限制一切输出的数据
这是避免跨站Script的进击的第二种办法,在停止登录的时侯,不要让那些特别的字符也输出出来。因而咱们可在ONSUBMIT方
法中到场JAVASCRIPT法式来完成这个功效。在本例中咱们限制最多只能输出15个字符。如许可以禁止那些较长的script的输出。
在<<Knowledge Base Article QA252985>>这本书中微软供应了一个冗长的Javascript法式来完成对输出数据的过滤。咱们
也依据详细情形引进了这段代码用于咱们的例子中,如:
function checkForm() {
document.forms.userName.value = _
RemoveBad(document.forms.userName.value);
return true;
}
// MICROSOFT'S CODE
function RemoveBad(strTemp) {
strTemp = strTemp.replace(/\</\>/\"/\'/\%/\;/\(/\)/\&/\+/\-/g,"");
return strTemp;
}
用这个举措,可以过滤在输出中含有的这些字符:
% < > [ ] { } ; & + - " '( )
3.利用HTML和URL编码
虽然利用下面所说的过滤和限制输出的举措是一种十分主要用进攻手腕,但它对我的这类采取邮件体例的进击仍是力所不及。
由于我把URL的参数直接放在邮件中。针对这类情形咱们不能不接纳一种更无力的平安办法。假如咱们用的ASP,处理起来绝对说来
要轻易很多。只需对静态生成的网页总停止HTML和URL编码就好了。针对咱们例子中的情形,在第一输出页中咱们对redirect URL
作了以下修改:
strRedirectUrl = strRedirectUrl & _
server.URLEncode(Response.Cookies("userName"))
在履行页中咱们到场:
strUserName =server.HTMLEncode(Request.QueryString("userName"))
和
strUserName =server.HTMLEncode(Request.Form("userName"))
微软保举对一切静态页面的输出和输入都应停止编码。乃至在对数据库数据的存入和掏出也应如斯。如许你就可以在很大水平上
防止跨站script的进击。
要做到这些还要在Page1.asp中到场:
<%@ Language=VBScript %>
<% If Request.Cookies("userName") <> "" Then
'redirect if detect the cookie
Dim strRedirectUrl
strRedirectUrl = "page2.asp?userName="
strRedirectUrl = strRedirectUrl & _
server.URLEncode(Request.Cookies("userName"))
Response.Redirect(strRedirectUrl)
Else %>
<HTML>
<HEAD>
<META http-equiv="Content-Type"content="text/html; charset=ISO-8859-1">
<TITLE>MyNiceSite.com Home Page</TITLE>
</HEAD>
<SCRIPT LANGUAGE="javascript">
<!--
function checkForm() {
document.forms.userName.value =
RemoveBad(document.forms.userName.value);
return true;
}
//******************************************************
//Programmer: NOT ORIGINAL CODE - COMES FROM MICROSOFT
//Code Source: Microsoft Knowledge Base Article Q25z985
//Description: Removes bad characters.
//******************************************************
function RemoveBad(strTemp) {
strTemp =strTemp.replace(/\</\>/\"/\'/\%/\;/\(/\)/\&/\+/\-/g, "");
return strTemp;
}
//-->
</SCRIPT>
<BODY>
<BR>
<H2>MyNiceSite.com</H2>
<BR>
<FORM method="post"action="page2.asp" >
Enter your MyNiceSite.com username:
<INPUT type="text"name="userName" width="10" maxwidth="10">
<INPUT type="submit"name="submit" value="submit">
</FORM>
</BODY>
</HTML>
<% end if %>
Page2.asp中加如:
<%@ Language=VBScript %>
<% Dim strUserName
If Request.QueryString("userName")<>"" Then
strUserName =server.HTMLEncode(Request.QueryString("userName"))
Else
Response.Cookies("userName") =Request.Form("userName")
strUserName = server.HTMLEncode(Request.Form("userName"))
End If %>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
</HEAD>
<BODY>
<H3 align="center">Hello: <%= strUserName %></H3>
</BODY>
</HTML>
如今因为这类进击遭到无效的防制。那于那些歹意的标签和Script被编码,他们就被以文字的模式展现了出来,以下图:
咱们也可增添一个IIS组件用于过滤一切从静态输出中的特别字符。关于那些已做好的网站,采取这类举措来避免跨站
script的进击来得十分轻易。咱们的这个控件能拦阻来自ASP页面的REQUEST方针,可对表格,cookie,恳求字串和法式的内容停止
检测:
咱们也能够经由过程编写log文件的办法把统计数据到场这个组件中。每当一个客户输出一个不法字符时,这个组件会记下它的IP
地址和工夫。概况请见Doug Dean的<<Roll your Own IIS Application on ASPToday>>一文。
咱们只需接纳一些复杂的步聚就可以无效地禁止跨站script的进击。除以上所说的三种办法外,微软和CERT还激烈保举利用一
种他们称之为“sanity check”的办法。例如,假定有个输出窗口只答应输出数字,咱们就给它做个限制,只答应0-9数字的输
入。微软和CERT所采取的这类对输出的字符停止限制的举措要比独自的采取过滤特别字符要好很多。采取了这些办法后你就可以让那
些观赏你网站的客户在会见你网站时遭到回护。
2、免受黑客进击咱们阅读器办法:
当你在网上遨游的时侯,如何来防止遭到进击呢?微软和CERT建议不要在网上胡碰乱闯。针对这类情形,PC杂志一个栏目标名
叫John Dvorack作者作了一个饶有乐趣的回覆。他以为这是微软公司一同有预谋的行动:就是用来威吓网上冲浪的人到那些平安的
站点去阅读,如美国在线和MSN.com网站。
在咱们所举的例子中,即便你不在网上胡乱浪荡,也不克不及防止在网上遭到黑客的攻击。具有取笑意义的是,大多半的风险都来
自于咱们最信赖的网站。假如要让网站必定不出成绩,你只好不下载任何静态内容或任何cookie。预知概况请参阅阅读器的相干
材料。
微软也正告你们应把阅读器的Active Script设置成严厉限制的形态并把Email也设成严厉限制的吸收形式。在点击邮件中的
链接时,必定要当心。如需进一步懂得情形请参阅一本名叫<<Microsoft's Knowledge Base Article Q253117>>的书。为了以
防万一,你最好是多一点上彀经历,而且时辰要当心慎重。
结论
假如你是之前的UNIX法式开辟人员,你或许不会晓得跨站script意谓着甚么。你晓得很多站点的办理人员登录的用户名和暗码
分离为root,root.一样很多数据库办理员的称号和暗码分离为sa,password。你也晓得Webzine(如Phrack 和 Alt2600),根据他
们所供应的办法能让你一步步地晓得某台办事器的弱点。在这类硬件上,你也晓得很多网站的数据库办事器和web办事器都没有停止
自我回护。一但遭受黑客,机械就得瘫痪。
虽然咱们很轻易接纳避免体系遭到黑客的进击的办法,但咱们的体系是一向表露在黑客眼前的。咱们完整有来由信任下一年还
会呈现一些新的平安破绽。在CERT公司John Howard师长教师指点下完成的一篇论文中曾提到:“跟据今朝的研讨显示,每一个在英特网
上具有域名的网站均匀一年被黑客最少进击一次。”
对办事器来讲那怕只是一次这类进击也是不克不及接受的。跨站Script进击是黑客可采取的另外一种办法。但咱们只需停止以上所说
的一些复杂的处置就可以避免这类模式进击的产生。
由于ASP还是一种Script语言所没除了大量使用组件外,没有办法提高其工作效率。它必须面对即时编绎的时间考验,同时我们还不知其背后的组件会是一个什么样的状况; 兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。 还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。 以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。 Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点) 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write 我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标. 学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点: 他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。 封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。 还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。 不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
页:
[1]