初学ASP最容易犯的程序问题及解决办法

程序|初学|解决|问题

在ASP编程中,身份认证可以说是常要用到的。但怎么样才能做到认证的安全呢?

举例:

表单提交页面:sub.htm

<html>
<head>
<title>管理员登陆</title>
<body>
<form name="form1" method="post" action="sub.asp">
<p> 管理员:
<input type="text" name="UserID" size="25" maxlength="20">
密 码:
<input type="text" name="Pass" size="12" maxlength="20">
<input type="submit" name="Submit" value="提交">
</p>
</form>
</body>
</html>

SUB.asp程序

<%
接收表单中的数据
user=request.from("UserID")
检察表单提交的数据是否为空(表单页面可能你用JAVASCRIPT OR VBSCRIPT控制了,但这里也不要忘记控制!
if user="" then
转到出错提示页面!
response.redirect "err1.htm"
这一句可能没用,但加上为好!
response.end
end if
pass=request.from("Pass")
if pass="" then
response.redirect "err2.htm"
response.end
end if
联接数据库
file=server.mappath("你的数据库")
set conn=server.createobject("adodb.connection")
dr="driver={microsoft access driver (*.mdb)};dbq="&file
conn.open dr
set rs=server.createobject("adodb.recordset")
关键是这里的SQL语言
sql="select * from 表 where user= "&user&" and pass= "&pass&" "
rs.open sql
if not rs.eof then
找到的话就进入管理页面
reponse.redirect "login.asp"
else
没找到就进入错误页面
response.write "err3.htm"
end if
%>

大家感觉以上代码应该没问题啊,但是这里有一个严重的安全隐患:

我如果想登录管理员的话可以在SUb.htm表单输入框中输入:

第一个文本框中输入:a or 1 = 1 或 OR =

第二个文本框中输入:a or 1 = 1 或 OR =

提交,大家会看到...“呜,听我说完好不好,砖头一会再丢过来..."

"a " 和“1”为任意字符

有人会问为什么你输入这些字符会以管理员身份进入呢??

其实这些字符是对你程序中SQL语言的欺骗,而成功进入的

大家看:开始程序SQL中是对表进行查询满足user= "&user&" and pass= "&pass&" "条件的记录
sql="select * from 表 where user= "&user&" and pass= "&pass&" "

我而输入上面的代码后就成了:

sql="select * from 表 where user= a or 1 = 1 and pass= a or 1 = 1 "

大家看看,能有不进入的理由吗??给我一个不进入的理由,先!

以上USER PASS字段为字符型 如果是数字型也一样的道理!

解决方法:

一、函数替代法:

用REPLACE将用户端输入的内容中含有特殊字符进行替换,达到控制目的啊!:)

sql="select * from 表 where user= "&replace(user," "," ")&" and pass= "&replace(pass," "," ")&" "

这种方法每次只能替换一个字符,其实危险的字符不只是" ",还有如">"、"<"、"&"、"%"等字符应该全控制起来。但用REPLACE函数好象不太胜任那怎么办呢??

二、程序控制法

用程序来对客户端输入的内容全部控制起来,这样能全面控制用户端输入的任何可能的危险字符或代码,我就的这个方法!:)

举例说明:

<%
捕捉用户端提交的表单内容
user=request.from("user")
pass=request.from("pass")
...
循环控制开始
for i=1 to len(user)
用MID函数读出变量user中i 位置的一个字符
us=mid(user,i,1)
将读出的字符进行比较
if us=" " or us="%" or us="<" or us=">" or us="&" then
如果含有以上字符将出错提示,不能含有以上特殊字符
response.redirect "err2.htm"
response.end
end if
next
...
%>

时间: 2024-09-04 06:28:18

初学ASP最容易犯的程序问题及解决办法的相关文章

在ASP.net中的UpdatePanel,弹窗失败解决办法

原文:在ASP.net中的UpdatePanel,弹窗失败解决办法 最开始我用: Response.Write("<script>alert('和哈呵呵呵呵呵呵!')</script>"); 在没有UpdatePanel时,这个有效,能够正确弹出提示窗口. 后面,页面改进,加上局部刷新后,该方式失效了.探索出新的方式:   ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(),

在ASP中常见的错误80004005信息和解决办法

作者:BatMan错误信息(错误信息我不用翻译成中文了吧,呵呵,大家谅解)Microsoft OLE DB Provider for ODBC Drivers error '80004005'[Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet databaseengine cannot open the file '(unknown)'. It is already opened exclusivelyby another

以前收集的一些资料---ASP中常见的错误80004005信息和解决办法

错误|解决 错误80004005信息处理方法(给小城写的,你好好找找把) 错误信息(错误信息我不用翻译成中文了把,呵呵,大家谅解)     Microsoft OLE DB Provider for ODBC Drivers error '80004005'     [Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database     engine cannot open the file '(unknown)'.

Font Capture:AcrobatInfo.exe 应用程序错误的解决办法

Font Capture:AcrobatInfo.exe 错误,AcrobatInfo.exe 错误,Font Capture错误的最简单的解决办法,终极解决方案. 出 现这个错误的朋友大部分都是安装Adobe Acrobat 9 Pro之后才会出现的,而且不一定要打开使用Adobe Acrobat 9 Pro,在使用电脑,打开浏览器等多种时候都会提示这个"Font Capture:AcrobatInfo.exe应用程序错误的内存错误",很严重,经常会弹出这个错误. 最简单的解决办法:

卸载SQL2008遇到问题(重启计算机失败、找不到SQL卸载程序)的解决办法_mssql2008

重启计算机失败.找不到SQL卸载程序问题的解决方法,具体内容如下 问题1:很奇怪,控制面板找不到SQL的卸载程序,后来在网上查知需要修复windows卸载/安装程序,官网下载网址: http://download.microsoft.com/download/7/E/9/7E9188C0-2511-4B01-8B4E-0A641EC2F600/MicrosoftProgram_Install_and_Uninstall.meta.diagcab1.1 下载双击打开后,直接选next 1.2 根据

win7组件服务COM+应用程序编录错误解决办法

一般情况下,我们遇到过的COM+应用程序编录错误共有两个:(1)第一个是打开COM+应用程序时出现"编录错误,执行最后操作发生错误,错误代码8007042C-依赖服务或组无法启动,事件或日志包含其他错误疑难信息".          解决办法其实很简单,只需将"服务"中的"System Event Notification Service"服务启动即可,它是一个监视系统事件的COM+   事件系统服务,必须确保启动. System Event N

ASP.Net生成后台脚本的问题的解决办法

asp.net|后台|脚本|解决|问题 用ASP.NET开发web应用经常会用到弹出对话框,一般情况下我是这样写的 Response.Write("","<script>alert('弹出窗口!');</script>"); 但是这样写有一个问题就是当 对话框弹出的时候整个页面都是白的,进度条在缓慢的移动,等你点了确定后就好了,这是为什么呢? 我是这样理解的,程序是顺序执行的,当执行到上面的语句的时候,程序开始等待用户的操作,然后再往下执行,

sql server 安装出现“以前的某个程序安装...”的解决办法

笔者昨日在自己电脑上安装sql server 数据库,提示错误"以前的某个程序安装已在安装的计算机上创建挂起的文件操作.运行安装程序之前必须重新启动计算机"由于是第一次安装.就老老实实的按他的要求重启计算机然后在安装,接过还是提示这个错误.        笔者昨日在自己电脑上安装sql server 数据库,提示错误"以前的某个程序安装已在安装的计算机上创建挂起的文件操作.运行安装程序之前必须重新启动计算机"由于是第一次安装.就老老实实的按他的要求重启计算机然后在安

HTTP 401.5未经授权:ISAPI-CGI 应用程序授权失败解决办法

错误信息: 您未被授权查看该页您试图访问的 URL 安装有 ISAPI 或 CGI 应用程序,在继续执行之前对用户凭据进行验证.该应用程序无法验证您的凭据.请尝试以下操作: HTTP 401.5 - 未经授权:ISAPI/CGI 应用程序授权失败. 原因分析一 Web 地址具有 ISAPI (Internet 服务器应用程序编程接口) 或 CGI (公共网关接口) 程序验证用户凭据.此程序,用来连接到服务器的身份验证凭据已被拒绝访问. 解决方案 若要解决此问题,请尝试访问的服务器,请再次使用适当