程序员易犯的20条错误

原创 2004年10月27日 13:17:00
程序员易犯的20条错误
<?XML:NAMESPACE PREFIX = SITEMANAGER-CMS_INCLUDE /> 

1.不要将没有过滤的用户输入发送给客户端.
如:Response.Write "You have entered " & Request("UserInput")
2.不要信任客户端和SESSION变量.
3.不要忘记指定字符集.
<META http-equiv="Content-Type" content="text/html; charset=GB2312">
4.不要在没处理文件路径的情况下让用户访问文件.
如:这样的表达式是不正常的.
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%2e/global.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")

程序员容易犯的十大错误

1.面向编译器写代码,而不是面向用户 当人们使用编译器创建自己的app时,在把自己的想法诉诸于机器代码的过程中,常常会将那些可以使得编程更为简单却又冗长的语法遗忘于脑后。 无论你使用的是单字母的标识符...
  • u012701023
  • u012701023
  • 2015年07月13日 23:31
  • 810

程序员们最易犯的10种错误

程序员们最易犯的10种错误 计算机行业中无疑程序员的薪资待遇是极高的,每年都有大量的人投身软件编程行业,成为一名程序员。 1、缺少必要的注释 大段的iF-else缺少注释,让维护...
  • thanklife
  • thanklife
  • 2017年06月02日 13:56
  • 145

Java程序最容易犯的21种错误

  • GOALSTAR
  • GOALSTAR
  • 2007年06月06日 19:10
  • 887

前端中容易犯低级错误的地方

由于自己基础比较薄弱,也可以说知识的深度不够,在写前端代码的时候,往往会出现这样那样的低级问题,以及低级错误,在这里我总结出来了,还是那句话,大神可以绕道了     1.关于页面中js文件和css...
  • ZYGG5521
  • ZYGG5521
  • 2015年08月22日 17:01
  • 672

冯仑《企业领导最容易犯的十大错误》 .

冯仑这样的企业家是从中国经济蛮荒时代过来的人,是先懂江湖,后懂业务的典范。这样的人经历了从混沌到清晰,从传统到现代的历程,对很多问题更能一眼看到本质,而不是那么多空洞的理论和理想主义。这一点,是我们这...
  • yefighter
  • yefighter
  • 2013年01月25日 13:49
  • 1412

c++编程常犯错误

1)重复声明变量,这个很致命,每次声明了全局变量之后,一定保证其余的函数里面都没有同名变量的声明 2)粘贴复制,在粘贴复制的过程中一定保证需要修改的部分都及时修改了 3)c++调试的最好用的方法就是打...
  • ltt19900822
  • ltt19900822
  • 2015年01月23日 11:30
  • 257

Java之——程序员容易犯的常见十大错误

1. Array 转 ArrayList 一般开发者喜欢用: List list = Arrays.asList(arr);Arrays.asList() 会返回一个ArrayList,这是Array...
  • l1028386804
  • l1028386804
  • 2016年03月02日 09:59
  • 1316

数据挖掘中最容易犯的十大错误

在从事数据挖掘的工作中,常常会犯一些不注意的小错误,那么我们在做数据挖掘的时候应注意的错误是什么呢?对于目前的大数据时代,数据挖掘方面的工作当然也成了一个热门的行业,很多其他行业的人员也希望可以同自己...
  • Edin_BlackPoint
  • Edin_BlackPoint
  • 2016年11月15日 17:36
  • 379

Python 易犯错误

修改函数默认参数def fun(x=[],y=False): y=True x.append('hello') return x,yif __name__ == '__main...
  • qq_17612199
  • qq_17612199
  • 2016年04月23日 16:21
  • 228

Java初学者常犯的错误

不含包层次的HelloWorld.javapublic class HelloWorld{ public static void main(String[] args) { System.out.pr...
  • daichanglin
  • daichanglin
  • 2007年03月13日 11:22
  • 553
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序员易犯的20条错误
举报原因:
原因补充:

(最多只允许输入30个字)