程序员易犯的20条错误
1.不要将没有过滤的用户输入发送给客户端.
如:Response.Write "You have entered " & Request("UserInput")
2.不要信任客户端和SESSION变量.
3.不要忘记指定字符集.
<META http-equiv="Content-Type" content="text/html; charset=GB2312">
4.不要在没处理文件路径的情况下让用户访问文件.
如:这样的表达式是不正常的.
[url=http://www.example.net/article.asp?file=new.htm]http://www.example.net/article.asp?file=new.htm
这将导致以下情况的发生:
http://www.example.net/article.asp?file=/global.asa
http://www.example.net/article.asp?file=/../../../boot.ini
http://www.example.net/article.asp?file=LPT1
http://www.example.net/article.asp?file=%2e%2eglobal.asa
可用以下方法来正确处理该情况:
<%
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set f = fso.GetFile(request("file"))
If err then
Response.Write "Error"
Else
Response.Write f.Path
End If
%>
5.在没有过滤用户输入的情况下,不要进行SQL查询.
6.如果你的数据库内容来自用户的输入,不要相信它.
7.不要将密码或者其它敏感的数据保存在ASP页面中.
8.不要依赖弱安全检查的内容.
如:HTTP重定向,HTML中的TEXT字段的最大长度限制等等.
9.不要将注释留在HTML页面中,特别是一些敏感信息.
10.不要给出太多不必要的信息给客户端.
如在一个登录页面,登录失败的信息就不能太多,如果将:密码是四位,用户不存在等过多的信息给客户端,将会给那些不怀好意的家伙有机可乘!
11.不要在当前路径下写文件,数据库操作.要将文件,数据库文件单独放在一个分区或在WEB根目录这外的目录下.
12.不要在URL中带敏感信息.
13.不要使用INC文件.
因为IIS默认情况下是不处理INC文件的,最好用.INC.ASP扩展名.
14.不要在没有验证用户输入的情况下发送邮件.
15.不要在FORM的HIDDEN字段中保存敏感数据.
16.不要让IIS来处理错误,因为会发送太多的信息给客户端.
最好将IIS的脚本调试改为只发送文本信息.
17.好好的控制你的代码.
将那些不用的,临时的代码都删除,如.test.asp,index.asp.bak
18.在没有测试的情况下不要发布你的代码.
19.不要将不必要的敏感数据存在数据库中,这样万一你的数据库被攻破,也不要造成更大的损失.
20.不要以为这样就够了,还有更多的情况要在实际中被考虑到.
二、Adodb.Stream 的使用说明
组件:"Adodb.Stream"
有下列方法:
Cancel 方法
使用方法如下
Object.Cancel
说明:取消执行挂起的异步 Execute 或 Open 方法的调用。
Close 方法
使用方法如下
Object.Close
:关闭对像
CopyTo 方法
使用方法如下
Object.CopyTo(destStream,[CharNumber])
说明:将对像的数据复制,destStream指向要复制的对像,CharNumber为可选参数,指要复制的字节数,不选为全部复制。
Flush 方法
使用方法如下
Object.Flush
说明:
LoadFromFile 方法
使用方法如下
Object.LoadFromFile(FileName)
说明:将FileName指定的文件装入对像中,参数FileName为指定的用户名。
Open 方法
使用方法如下
Object.Open(Source,[Mode],[Options],[UserName],[Password])
说明:打开对像,
参数说明:Sourece 对像源,可不指定
Mode 指定打开模式,可不指定,可选参数如下:
adModeRead =1
adModeReadWrite =3
adModeRecursive =4194304
adModeShareDenyNone =16
adModeShareDenyRead =4
adModeShareDenyWrite =8
adModeShareExclusive =12
adModeUnknown =0
adModeWrite =2
Options 指定打开的选项,可不指定,可选参数如下:
adOpenStreamAsync =1
adOpenStreamFromRecord =4
adOpenStreamUnspecified=-1
UserName 指定用户名,可不指定。
Password 指定用户名的密码
Read 方法
使用方法如下:
Object.Read(Numbytes)
说明:读取指定长度的二进制内容。
参数说明:Numbytes指定的要读取的找度,不指定则读取全部。
ReadText 方法
使用方法如下:
Object.ReadText(NumChars)
说明:读取指定长度的文本
参数说明:NumChars指定的要读取的找度,不指定则读取全部。
SaveToFile 方法
使用方法如下:
Object.SaveToFile(FileName,[Options])
说明:将对像的内容写到FileName指定的文件中
参数说明:FileName指定的文件
Options 存取的选项,可不指定,可选参数如下:
adSaveCreateNotExist =1
adSaveCreateOverWrite =2
SetEOS 方法
使用方法如下:
Object.setEOS()
说明:
SkipLine 方法
使用方法如下:
Object.SkipLine()
说明:
Write 方法
使用方法如下:
Object.Write(Buffer)
说明:将指定的数据装入对像中。
参数说明:Buffer 为指定的要写入的内容。
WriteText 方法
使用方法如下:
Object.Write(Data,[Options])
说明:将指定的文本数据装入对像中。
参数说明:Data 为指定的要写入的内容。
Options 写入的选项,可不指定,可选参数如下:
adWriteChar =0
adWriteLine =1
有下列属性:
Charset
EOS 返回对像内数据是否为空。
LineSeparator 指定换行格式,可选参数有
adCR =13
adCRLF =-1
adLF =10
Mode 指定或返加模式。
Position 指定或返加对像内数据的当前指针。
Size 返回对像内数据的大小。
State 返加对像状态是否打开。
Type 指定或返回的数据类型,可选参数为:
adTypeBinary =1
adTypeText =2
三、根据需要动态include不同的文件(需要FSO支持)
受<! #include file="filename.asp" --> 宏限制
必须存在该文件并且会预先编译(不管前面是否加以条件)
经常有这样的要求,根据不同的需求要求include不同的文件
如各个人的不同设置,所以要求能动态include文件。
代码如下:
Function include(filename)
Dim re,content,fso,f,aspStart,aspEnd
set fso=CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(server.mappath(filename))
content=f.ReadAll
f.close
set f=nothing
set fso=nothing
set re=new RegExp
re.pattern="^\s*="
aspEnd=1
aspStart=inStr(aspEnd,content,"<%")+2
do while aspStart>aspEnd+1
Response.write Mid(content,aspEnd,aspStart-aspEnd-2)
aspEnd=inStr(aspStart,content,"%\>")+2
Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write "))
aspStart=inStr(aspEnd,content,"<%")+2
loop
Response.write Mid(content,aspEnd)
set re=nothing
End Function
使用范例:
include("youinc.asp")