CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  PHP

怎样把网站的管理页面放在另一个文件夹里,让网络上的用户看不到该文件夹呢?

楼主veijerd(玮杰)2002-05-12 16:06:15 在 Web 开发 / PHP 提问

是不是在apache里再映射一个虚拟目录?  
  怎么做?  
  问题点数:50、回复次数:10Top

1 楼LeeMaRS(小菜虎,仍需努力)回复于 2002-05-12 16:15:10 得分 30

怎么能看得见呢?  
  只要你不讲   不在WEB页中出现   不打开Indexes  
  就没问题的呀..Top

2 楼hjw(萧风)回复于 2002-05-12 16:30:36 得分 0

不安全吧  
  好像有支持安全目录的?  
  加上WEB验证就可以呀。。Top

3 楼cryingboy(哭泣男孩)回复于 2002-05-12 16:39:30 得分 20

在专业的   Web   站台上,常常会需要使用者的帐号及密码,也就是身份确认的动作。早期的   NCSA   httpd   伺   服器并没有提供这项使用者确认的功能,Webmaster   只能用手工打造一个身份确认的   CGI   程式。    
  自   CERN   httpd   之后的   Web   伺服器大部份都提供了使用者身份确认的功能。仅管每套   Web   伺服器的设   定都不太相同,但在设定上都大同小异。    
   
  以下就是   Apache   伺服器上的使用者身份确认的设定。    
   
   
  <Directory   /home/MyMember>    
  AuthType   Basic    
  AuthName   MyMember    
  AuthUserFile   /usr/local/MyMember.txt    
  Options   Includes   ExecCGI    
  <Limit   GET   POST>    
  require   valid-user    
  </Limit>    
  </Directory>    
   
  在这个例子中,当使用者在看   MyMember   目录下所有的档案,包括图片档案及其它各式档案时,都需要使   用者的帐号密码确认。而使用者的帐号及密码档都存在于/usr/local/MyMember.txt   之中。    
   
  这个帐号密码档   /usr/local/MyMember.txt   的样子可能如下例。其中冒号前的字串是使用者帐号,冒号之   后的字串是经过不可还原加密的密码,编码一般都是使用传统的   DES   编码,密码的头二个字是类似种子的字元   (salt),本例中都是   3P。每行代表一位使用者。当然   Webmaster   要自行控制重覆帐号的情形。比较特殊是在   Win32   系统上架   Apache   的情形,冒号后的密码不可加密,因为   Win32   没有提供这方面的编码    
  API,因此使用者密码以明码的方式存在。    
   
   
  john1234:3PWudBlJMiwro    
  queenwan:3PFNVLNPN9W0M    
  noname00:3PEsXaJx5pk7E    
  wilson49:3PjoWb0EnaG22    
  rootboot:3PIt0snI6.84E    
  sun_moon:3PvymMeNOc.x.    
  nobody38:3PbskPKwV94hw    
   
  在   Apache   1.3.6   版上,可以用   ~apache/bin/htpasswd   来产生单笔的帐号及密码,但对于需要大笔资料   的商业站台,可能就需要自行写程式来处理了。UNIX   上需要呼叫   crypt()   来处理编码。    
   
   
   
  在一切都设定好了之后,连线时就会在浏览器出现查核密码的视窗,如上图就是SEEDNet   的   MySEED   网站   的使用者查核机制。在输入了帐号及密码后,浏览器会将它用BASE64   编码后,传到伺服器端。当然   BASE64   只   是编码不是加密,因此在网路上这种传输的安全性仍然不高,还是有可能被中间的刽客截下,再将   BASE64   还   原,这也是整个使用者认证中最美中不足的地方,或许日后支援摘要认证   (Digest)   及使用   MD5   编码后,可以   解决这种问题。之后每一页仍然需要帐号及密码,只不过浏览器会帮你主动送出,不用再输入帐号密码了。这   方面浏览器会保留到被关闭为止,下次重执行浏览器仍需输入第一次。    
   
  在使用者数量少时,使用上述的方法轻松又省事。但是在使用者有数万人,甚至数十万人时,会发生整个   伺服器的效率都被搜寻帐号密码下拖垮,可能读取一页需要数十秒到数分钟。这种情形再使用伺服器提供的密   码查核机制就不太明智了。在Netscape   Enterprise   Server   上可能就可以使用   NSAPI   来开发自己的查核方式   ,在IIS   上也可以用   ISAPI   过滤器开发。写   C/C++   程式呼叫   NSAPI/ISAPI   总是很累,在PHP   上有了另外的选   择,这也是本节的主题。    
   
   
  PHP   的   HTTP   相关函式库提供了   header()   的函式。许多   Web   伺服器与客户端的互动,都可以使用这个函   式来变戏法。例如在某个   PHP   页面最开始处,也就是第一行或第二行,加入以下的程式,可以将使用者重导到   作者的网页。    
   
   
  <?php    
  header("Location:   http://wilson.gs");    
  exit;    
  ?>    
   
   
  当然,在上述程式之后的   HTML   文字或者是   PHP   程式都永远不会出现在使用者端了。    
   
  同样的道理,我们就用   header()   来变使用者认证的把戏。可以在   PHP   的最开头送出字串到使用者端,就   会在使用者端出现下图的视窗。    
   
   
  <?php    
  Header("WWW-Authenticate:   Basic   realm=\"Member\"");    
  Header("HTTP/1.0   401   Unauthorized");    
  ?>    
   
  在程式中字串   realm=\"Member\"   中的   Member   字样出现在图中,当然若使用中文字取代,浏   览器端也会出现中文字,如上面的   MySEED   图。若   Web   站台使用者还有其它语文,如英文或日文,送出中文的   realm   字串似乎就比较不合适。无论如何,这都要视站台的性质及使用者定位而决定。    
   
  当然这还是很粗糙,因为除了送出视窗后,就没有下文了,帐号输入正确也好,输入错误也罢,都不会有   任何的结果。我们需要再更进阶的程式来处理。    
   
   
  在后端的使用认证上,考虑使用资料库作为储存帐号及密码的后端,在这种架构可以容纳许多的使用者,   管它一万个使用者还是十万个使用者。若您的站已有数十万个使用者帐号,那么恭喜您,您的站算是世界级的   大站了。MySQL   是个不错的选择,许多站台,甚至是商业化的站台都用它来做后端的资料库。当然您要架真正   的商业站台,钱不是问题的话,那可以使用口碑最广的   Oracle   资料库系列。    
   
  要在   PHP   中使用任何资料库,都要先将资料库的伺服器端及客户端设定好,之后才编译   PHP   及   Apache   系统。    
   
  准备好   MySQL   及   PHP   之后,先在   MySQL   中加入新的资料库,本例是加入mymember,用别的名字当然也可   以。MySQL   要加入资料库   (Database)   很容易,只要在MySQL   存放   Database   的地方   mkdir   就可以了。例如在   UNIX   Shell   下打    
   
  hahaha:/usr/local/mysql/data#   mkdir   mymember    
   
  在建立了资料库之后,尚需要建立资料表格   (Table)   方能使用。设定的表格如下,可以将它储在   /tmp/memberauth.sql   中    
   
   
  CREATE   TABLE   MemberAuth   (    
  Serial   mediumint(9)   NOT   NULL   auto_increment,    
  Username   char(8)   NOT   NULL,    
  Password   char(8)   NOT   NULL,    
  Enable   char(1)   DEFAULT   '0'   NOT   NULL,    
  PRIMARY   KEY   (Serial)    
  );    
   
  档案   memberauth.sql    
   
  先看看   memberauth.sql   的这些栏位。Serial   是个自动增加的整数栏位,每输入一笔资料,就会自动加一   ,这当然不能是空的栏位,于是就用   NOT   NULL   了。第二个栏位是   Username,代表使用者的帐号,为了统一以   及适应各系统起见,设定成八个字,当然这个栏位也不能是空的。Password   是第三个栏位,为使用者的密码。   第四个栏位   Enable   做为帐号是否有效的旗标,设计上   0   表示无用,1   表可用,日后还可加入其它值做不同的   用途。    
   
  设计好了资料表之后,就要将资料表加入资料库了。由于常要使用   MySQL   资料库,可以到   http://www.phpwizard.net/phpMyAdmin   下载   phpMyAdmin,使用浏览器操作及管理   MySQL,轻松又方便。若使   用这套   phpMyAdmin   可以在它的使用者介面上输入memberauth.sql   加入   MySQL   中。或者也可以在   UNIX   Shell   下输入下式,也是有同样的效果。    
   
  mysql   mymember   <   /tmp/memberauth.sql    
   
  在准备好了之后,就可以输入使用者帐号及密码在   memberauth   资料表中了。当然还是使用   phpMyAdmin   方便,用   mysql   程式就要一笔笔的   INSERT   了。    
   
  接着进入了设计函式的阶段了。    
   
   
  <?php    
  file://---------------------------    
  //   使用者认证函式   auth.inc    
  //   Author:   Wilson   Peng    
  //   Copyright   (C)   1999    
  file://---------------------------    
  $error401   =   "/home/phpdocs/error/401.php";    
  if   ($PHP_AUTH_PW=="")   {    
  Header("WWW-Authenticate:   Basic   realm=\"超金卡会员\"");    
  Header("HTTP/1.0   401   Unauthorized");    
  include($error401);    
  exit;    
  }   else   {    
   
  $db_id   =   mysql_pconnect("localhost",   "myid",   "mypw");    
  $result   =   mysql_db_query("mymember","select   password,   enable    
  from   MemberAuth   where   username='$PHP_AUTH_USER'");    
   
  $row   =   mysql_fetch_array($result);    
  $MemberPasswd   =   $row[0];    
  $MemberEnable   =   $row[1];    
  if   ($MemberEnable==0)   {    
  echo   "您的帐号被停用了";    
  exit;    
  }    
   
  if   ($PHP_AUTH_PW!=$MemberPasswd)   {    
  Header("WWW-Authenticate:   Basic   realm=\"超金卡会员\"");    
  Header("HTTP/1.0   401   Unauthorized");    
  include($error401);    
  exit;    
  }    
  }    
  ?>    
   
  Copyright   (C)   1999,   Wilson   Peng    
   
  要使用这个   auth.inc,要在每个   PHP   的第一行加入    
  <?   require("auth.inc");   ?>   。    
  在加入本程式的   PHP   档案都会检查帐号密码,图片等就不会检查,比起使用   Web   伺服器功能的某目录下全都   检查,PHP   显得有弹性多了。    
   
  $error401   =   "/home/phpdocs/error/401.php";    
   
  这行表示在使用者按下取消,或检查失败时,要显示给使用者看的档案。    
   
  if   ($PHP_AUTH_PW=="")   {    
  Header("WWW-Authenticate:   Basic   realm=\"超金卡会员\"");    
  Header("HTTP/1.0   401   Unauthorized");    
  include($error401);    
  exit;    
  }   else    
   
   
  到   else   之前,若没有传入密码,则送出输入密码的视窗。其中的    
  $PHP_AUTH_USER、$PHP_AUTH_PW   是   PHP   中特殊的变数,分别代表使用者确认的帐号及密码。上面的程式也是   利用这二个变数来处理使用者认证。    
   
  $db_id   =   mysql_pconnect("localhost",   "myid",   "mypw");    
  $result   =   mysql_db_query("mymember","select   password,   enable   from    
  MemberAuth   where   username='$PHP_AUTH_USER'");    
   
  $row   =   mysql_fetch_array($result);    
  $MemberPasswd   =   $row[0];    
  $MemberEnable   =   $row[1];    
   
  若使用者有输入帐号及密码,则向资料库查询。同时查核该使用者是否仍可使用。    
   
  if   ($MemberEnable==0)   {    
  echo   "您的帐号被停用了";    
  exit;    
  }    
   
  上四行程式为帐号被停用的情形。    
   
  if   ($PHP_AUTH_PW!=$MemberPasswd)   {    
  Header("WWW-Authenticate:   Basic   realm=\"超金卡会员\"");    
  Header("HTTP/1.0   401   Unauthorized");    
  include($error401);    
  exit;    
  }    
   
  密码错误则再次向使用者要求输入帐号及密码。    
   
  在实际使用时,可以视需要加入的网页再加入   auth.inc   这个档案,就不用连看张图形也要查一次密码,   降低伺服器和使用者二端的资源。当然,和   MySQL   的连系上,可以使用   mysql_pconnect()   一直和   MySQL   伺   服器连线。或是使用mysql_connect()   每次重新连线,用这个函式要记得早点Top

4 楼veijerd(玮杰)回复于 2002-05-13 12:46:21 得分 0

我们老师的作业是要求该管理模块网上客户看不到  
  apache的htdocs目录是不是对外都可见的啊?如果是这样的话,  
  我想能不能有个虚拟目录,比如说htdocs外吧,该目录的php程序只能在本地运行?  
  因为要求不是说通过身份认证使他们进不去,而是让他们根本看不到呀  
   
  to   leemars(小菜虎)   :  
  Indexes是怎么回事呢?  
  照你的说法,应该怎么做呢Top

5 楼cryingboy(哭泣男孩)回复于 2002-05-13 18:32:45 得分 0

在hotdocs外怎么,对PHP预处理呢!虚拟目录,也属于htdocs.  
   
  看来,还是写个第三方软件来管理  
  Top

6 楼LeeMaRS(小菜虎,仍需努力)回复于 2002-05-13 22:14:34 得分 0

我的意思是  
  如果你在htdocs的目录设置中不选Indexes,那么htdocs就不会被列出目录列表.  
   
  只要你的管理目录在网页中不出现,你不跟别人讲,会有人知道吗?Top

7 楼LeeMaRS(小菜虎,仍需努力)回复于 2002-05-13 22:18:07 得分 0

当然   用户如果真知道了   还是可以访问的.  
   
  或者   你可以使用虚拟主机   再建一个专用的本机访问Top

8 楼LeeMaRS(小菜虎,仍需努力)回复于 2002-05-13 22:21:41 得分 0

当然   如果这个目录被用户知道了   还是可以访问的.  
   
  或者你可以专门为这个管理页建一个虚拟主机Top

9 楼veijerd(玮杰)回复于 2002-05-13 22:23:46 得分 0

to     leemars(小菜虎)  
  i   see  
  Top

10 楼veijerd(玮杰)回复于 2002-05-13 22:24:31 得分 0

htdocs的目录设置中不选Indexes  
  具体的做法是什么阿Top

11 楼LeeMaRS(小菜虎,仍需努力)回复于 2002-05-14 01:51:36 得分 0

注意httpd.conf中的以下这一段:  
   
  #  
  #   This   may   also   be   "None",   "All",   or   any   combination   of   "Indexes",  
  #   "Includes",   "FollowSymLinks",   "ExecCGI",   or   "MultiViews".  
  #  
  #   Note   that   "MultiViews"   must   be   named   *explicitly*   ---   "Options   All"  
  #   doesn't   give   it   to   you.  
  #  
          Options   FollowSymLinks   MultiViews   Indexes   //注意!!!!!!!!!就是这里了  
   
  #  
  #   This   controls   which   options   the   .htaccess   files   in   directories   can  
  #   override.   Can   also   be   "All",   or   any   combination   of   "Options",   "FileInfo",    
  #   "AuthConfig",   and   "Limit"  
  #  
          AllowOverride   None  
   
  #  
  #   Controls   who   can   get   stuff   from   this   server.  
  #  
          Order   allow,deny  
          Allow   from   all  
  </Directory>  
   
  请把那一句  
          Options   FollowSymLinks   MultiViews   Indexes  
  改为  
          Options   FollowSymLinks   MultiViews  
   
  就可以了.  
  Top

相关问题

  • 所以文件夹下的东西看不到
  • 看不到Localhost的页面?????????????
  • 如何在页面中管理文件夹
  • test 文件夹 改名 为 test12 文件夹 为什么可以 正常显示 页面??????
  • 为何看不到网络邻居上其它计算机的共享文件夹?
  • 为什么用 exec master..xp_cmdshell 'dir D:\Program Files' 看不到文件或文件夹?
  • 装了XP和2000后,进2000系统看不到在XP系统下创建的文件夹?
  • 如何调用系统的“搜索文件文件夹”窗体及其页面?
  • jsp页面为什么不会自动复制到exploded文件夹里
  • 图片上传到文件夹.并在页面显示代码怎么些啊?

关键词

  • win32
  • 帐号
  • 密码
  • 编码
  • 浏览器
  • 使用者
  • mymember
  • 栏位
  • memberauth
  • 程式

得分解答快速导航

  • 帖主:veijerd
  • LeeMaRS
  • cryingboy

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo