ASP和SQL Server如何构建网页防火墙

所属分类: 数据库 / MsSql 阅读数: 914
收藏 0 赞 0 分享

ASP是Web上的客户机/服务器结构的中间层,虽然它使用脚本语言(Java Script,VB Script等)编写,程序代码在服务器上运行,在客户端仅可看到由ASP输出的动态HTML文件,但ASP仍具有某些漏洞,采取一定手段也可以看到ASP程序的源码。这时,通过ASP与SQL Server相结合,我们可以设计出简单、高效、可靠的应用程序。

为网页设置防火墙的主要目的是根据网页内容对不同来访者提供不同的服务,利用Java Script或VB Script,我们很容易做到这一点。但网页的源码在客户浏览器中可以被看到,访问者可以查看所用的用户鉴别方法,这只是一个表面形式的防火墙。

下面简单介绍一下其建立过程。

一、建立Login

在SQL Server上建立访问者的Login和Password。

二、在网络服务器上创建数据库DSN

使用“控制面板”中的“ODBC数据源管理器”创建某个数据库的ODBC 数据资源名,即DSN,这样以后可以通过使用数据库DSN连接具体的数据库。

“ODBC数据源管理器”提供了三种DSN,分别为用户DSN、系统DSN和文件DSN。其中,用户DSN会把相应的配置信息保存在Windows的注册表中,但是只允许创建该DSN的登录用户使用。系统DSN同样将有关的配置信息保存在系统注册表中,但是与用户DSN不同的是系统DSN允许所有登录服务器的用户使用。

与上述两种数据库DSN不同,文件DSN把具体的配置信息保存在硬盘上的某个具体文件中。文件DSN允许所有登录服务器的用户使用,而且即使在没有任何用户登录的情况下,也可以提供对数据库DSN的访问支持。此外,因为文件DSN被保存在硬盘文件里,所以可以方便地复制到其它机器中。这样,用户可以不对系统注册表进行任何改动就可直接使用在其它机器上创建的DSN。

在以上三种数据库DSN中,建议用户选择系统DSN或文件DSN,如果用户更喜欢文件DSN的可移植性,可以通过在NT系统下设定文件的访问权限获得较高的安全保障。

建立新的DSN,用户首先选择“添加”,然后在弹出窗口中选择用户将要建立连接的数据库类型并选择列表中的“SQL Server”项。如果用户是建立文件DSN,则单击“下一步”按钮并在随后的对话框中输入所要建立的文件DSN的文件名和保存路径。如果用户建立的是系统DSN,单击“完成”按钮。

在选择完数据库之后,用户需要对数据库DSN进行设置。用户需要选择提供数据库服务的具体服务器,设定登录用户名和口令,以及用户将要连接的数据库。

三、程序设计

下面要实现的就是一个简单的页面防火墙的功能。此页面只限制本单位内部网的用户进行访问(在此假设内部网的IP地址是从10.61.96.?至10.65.97.?之间),如果是单位外部用户进行访问则要求输入访问用户名及密码。在此要使用到request对象的ServerVariables属性,通过它来获得环境变量的值。

程序源码(firewall.asp)如下:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80"> 
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> 
<title>firewall.asp</title> 
</head> 
<body background="#800080 "> 
<% 
'使用Request.ServerVariables("REMOTE_ADDR")得到IP地址并保存在变量remoteip中 
remoteip=Request.ServerVariables("REMOTE_ADDR") 
stip=cstr(remoteip) 
取得IP地址第三个段的值并保存到stip中 
for i=1 to 2 
stip=right(stip,len(stip)-instr(1,stip,".")) 
next 
stip=left(stip,instr(1,stip,".")-1) 
'IP地址有效性检验及密码验证,包括两方面的内容:如果IP地址符合则通过验证;
如果IP地址不符合则检验输入的用户名、密码是否正确 
if (left(remoteip,5) <> "10.61" or stip<"96" or stip>"97") then 
username=request.form("t1") 
password=request.form("t2") 
Set fs = CreateObject("Scripting.FileSystemObject") 
Set thisfile = fs.OpenTextFile("dsn.txt") 
db loc=thisfile.readline 
thisfile.close 
cnstr=db_loc&&"uid="&&username&&";"&&"pid="&&password 
on error resume next 
set cn=server.createobject("adodb.connection") 
cn.open cnstr 
if err=3709 then %>  
<p><font color="#FF0000">对不起,用户:<%=username%>没有访问权限,或密码不正确! <BR></font></p> 
<form method="POST">  
<p align="center">
用户名:<input type="text" name="T1" size="20">
口令:<input type="password" name="T2" size="20">
<input type="submit" value="提交" name="B1"><input type="reset" value="全部重写" name="B2">  
</p> 
</form>  
<%end if 
cn.close  
set cn=nothing%> 
<%else %> 
恭喜您,您已经通过了验证,可以直接使用本站点的资源! 
<%end if%> 
</body> 
</html> 

稍微修改一下上面如IP地址等信息,该程序就可以运行了。

当然,上面只是实现在一个页面中的防火墙功能。如果一个网站有多个页面的话,可以设置一个session变量来对用户进行标志,在下面的页面中都进行判断。

希望通过本文的介绍,能够给你带来帮助。

更多精彩内容其他人还在看

SQL 提权 常用命令

SQL 提权 常用命令,大家可以考虑下将sqlserver的服务运行权限设置为普通用户,即可防止下面的提权。
收藏 0 赞 0 分享

数据转换冲突及转换过程中大对象的处理

数据转换冲突及转换过程中大对象的处理方法,大家可以参考下。
收藏 0 赞 0 分享

SQLServer 数据库开发顶级技巧

无论你的专业水平如何,从其他IT专家那里学习新的技巧与最佳实践常常都是有益的。本文包含了我遇到过的SQL Server开发的高级技巧。希望其中的一些技巧能够对您的数据库开发及管理工作有所帮助。
收藏 0 赞 0 分享

远程连接SQLSERVER 2000服务器方法

需求如下:需要远程连接外地的SQL Server 2000服务器。
收藏 0 赞 0 分享

SQLserver2000 企业版 出现"进程51发生了严重的异常"错误的处理方法

SQL2000 企业版 出现“进程51发生了严重的异常”错误的解决方法,利用了微软官方的工具。
收藏 0 赞 0 分享

SQLServer 触发器 数据库进行数据备份

首先,你需要建立测试数据表,一个用于插入数据:test3,另外一个作为备份:test3_bak
收藏 0 赞 0 分享

SQLServer 数据库备份过程中经常遇到的九种情况

SQLServer 数据库备份过程中经常遇到各种问题,大家可以参照下面的问题,来分析下,快速的解决问题。
收藏 0 赞 0 分享

SQL 截取字符串应用代码

字符串截取函数,只限单字节字符使用(对于中文的截取时遇上奇数长度是会出现乱码,需另行处理),本函数可截取字符串指定范围内的字符。
收藏 0 赞 0 分享

除MSSQL数据库text字段中恶意脚本的删方法

删除MSSQL数据库text字段的替换处理示例--全表替换,看到有人提问,所以整理了一个好久以前的处理方法,以供大家参考
收藏 0 赞 0 分享

sql 普通行列转换

说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法。
收藏 0 赞 0 分享
查看更多