三 后台验证方案
我们的思路很简单,用户把数据提交到后台,经Web服务器验证后,跳转到相应的页面,但是现在有个问题,我们怎样实现页面的跳转?Rl-TCPNet没有提供专门用于页面跳转的函数。
我们由process_data来验证是否成功登陆,在由cgi角本与JavaScript共同来实现网页的跳转。
跳转的实现,首先我们的cgi文件里加入一条JavaScript实现网页跳转的代码,但要跳转的页面用%s代替,然后将其传给cgi_func做进一步处理。例如:
c d 1 window.location.href="%s";
而页面提交的数据经过process_data验证后设置两个标志位,在由cgi_func处理,对因于上面cgi代码,我们应交由cgi_func的d 1处理,在其d 1中我们判断验证是否成功,成功则转向成功登陆的页面,否则转向登陆页重新登陆。跳转代码分析如下:
if(userName==1 && pwd==1)//如果登陆成功
{
len = sprintf((char *)buf,(const char *)&env[4], "test.cgi");//成功跳转
}
else
len = sprintf((char *)buf,(const char *)&env[4], "logn.html");//跳转失败
四 后台验证的安全性
为什么我已经验证了用户是否是合法的了,还要提到这个方法的安全性呢?在很多网络安全常识告诉我们,有很多方法是可以破解掉一个网站的登陆系统的,我简单地测试,了我的后台是否安全,我先看网页源代码,再也看不到明码的密码了。这方面已安全,然而当我用绕障法去测试时,却发现,我们根本不用登陆那么麻烦,直接在IE地址栏内输入相应网页地址,就可以跳转过去。这样我们就绕开了我们自以为安全的屏障,我们又要经过怎样的处理,才会却保不能绕开登陆而到达我们的安全域呢?
我的灵感告诉我,可以试着把所有的安全域都做成cgi的文件,在cgi的头部判断是否是已登陆的用户,如果是就正常显示,如果不是就转向登陆页。我试着这样去做,发现却实是种可行的方法,
cgi文件代码分析如下:
c d 2 if(%s) //交由cgi_func判断,是否已登陆,登陆则%s置0,否则置1跳转
t window.location.href="logn.html";
cgi_func代码分析如下:
if(logn==0)//如果没登陆
len = sprintf((char *)buf,(const char *)&env[4],"1");//%s置1跳转
else
len = sprintf((char *)buf,(const char *)&env[4],"0");//置0正常显示
五 logn.cgi代码
t <head>
t <script language="javascript">
c d 1 window.location.href="%s";
t </script>
t </head>
t <body>
t </body>
.
六 test.cgi代码
t <head>
t <script language="javascript">
c d 2 if(%s)
t window.location.href="logn.html";
t </script>
t </head>
t <body>
t test
t </body>
.
|