
为网页配置防火墙的主要目的是根据网页内容对不同来访者提供不同的服务,利用java script或vb script,我们很容易做到这一点。但网页的源码在客户浏览器中能够被看到,访问者能够查看所用的用户鉴别方法,这只是个表面形式的防火墙。asp是web上的客户机/服务器结构的中间层,虽然他使用脚本语言(java script,vb script等)编写,程式代码在服务器上运行,在客户端仅可看到由asp输出的动态html文档,但asp仍具备某些漏洞,采取一定手段也能够看到asp程式的源码。这时,通过asp和sql server相结合,我们能够设计出简单、高效、可靠的应用程式。下面简单介绍一下其建立过程。
一、建立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变量来对用户进行标志,在下面的页面中都进行判断。
|