小魔女 发表于 2015-1-16 22:48:17

ASP编程:跨站Script打击(3)

使用filesystemobject,可以对服务器上的文件进行操作,浏览、复制、移动、删除等。有ado的支持,asp对数据库的操作非常得心应手。你甚至可以像使用本地数据库那样,管理远程主机上的数据库,对表格、记录进行各种操作。打击第二部分:跨站Script打击的防犯

1、怎样制止服务器遭到跨站Script的打击

  值得光荣的是,避免跨站Script打击的手艺正趋于完美。今朝可接纳这几种体例来避免跨站Script的打击:

1.对静态天生的页面的字符举行编码

2.对输出举行过滤和限定

3.利用HTML和URL编码

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"onsubmit="returncheckForm();">

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="C</p>由于ASP还是一种Script语言所没除了大量使用组件外,没有办法提高其工作效率。它必须面对即时编绎的时间考验,同时我们还不知其背后的组件会是一个什么样的状况;

活着的死人 发表于 2015-1-19 23:54:42

如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:

灵魂腐蚀 发表于 2015-1-28 16:03:31

Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)

仓酷云 发表于 2015-2-5 22:05:52

Session:这个存储跟客户端会话过程的数据,默认20分钟失效

金色的骷髅 发表于 2015-2-13 20:12:18

不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍

柔情似水 发表于 2015-3-4 01:10:08

另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)

深爱那片海 发表于 2015-3-11 15:22:16

兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的

冷月葬花魂 发表于 2015-3-19 01:00:44

不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍

变相怪杰 发表于 2015-3-27 00:10:41

封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
页: [1]
查看完整版本: ASP编程:跨站Script打击(3)