分享

写回答

发帖

[经验] 完美解决win主机中php程序路径暴露问题

GoDaddy GoDaddy 1156 人阅读 | 2 人回复

发表于 2010-12-13 16:05:31 | 显示全部楼层 |阅读模式

以前发过一篇解决办法的帖子,思路没有问题,代码有些问题,重新发出来共享
    对于某些php程序来说,路径不正常是因为头部加了base标签。只要找到具体位置把<base href 去掉就可以了
    当时有些程序去掉也只解决了部分问题,比如discuz!x1.5,这个版本画蛇添足的地方比较多。
    想一劳永逸的解决路径问题只要添加php.ini,为每个php文件插入一段代码:
register_globals = off
allow_url_fopen = On
memory_limit = 50M
max_execution_time = 120
max_input_time = 60
post_max_size = 8M
file_uploads = On
upload_max_filesize = 128M
extension_dir = "c:\php5\ext"
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
extension=php_gd2.dll
extension=php_sockets.dll
extension=php_mbstring.dll
session.save_path = "d:/temp/tmp"
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_path = /
include_path=D:\Hosting\6902410\html
session.serialize_handler = php
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="

include_path=D:\Hosting\6902410\html
auto_prepend_file = auto_prepend_file.php;

复制上面的代码,以UTF-8格式保存为php5.ini,上传到空间根目录。 注意D:\Hosting\6902410\html 是你自己的空间绝对的物理路径,改成你自己的,可别用我这个哦,在管理界面就可以看的到
假设你有一个 xxxtest.com的域名,你在空间根目录下建立了一个 xxxtest的文件夹
里面有3个子文件夹,分别对应一个站点
webpages http://xxxtest.com
bbs      http://bbs.xxxtest.com
home     http://home.xxxtest.com

那么新建一个auto_prepend_file.php,里面的代码如下
<?php
if(strrpos($PHP_SELF, '/')!=0){
    $PHP_SELF=str_replace("/xxxtest/webpages","",$PHP_SELF);
        $PHP_SELF=str_replace("/xxxtest/bbs","",$PHP_SELF);
    $PHP_SELF=str_replace("/xxxtest/home","",$PHP_SELF);
}
if(strrpos($_SERVER['PHP_SELF'], '/')!=0){
     $_SERVER['PHP_SELF']=str_replace("/xxxtest/webpages","",$_SERVER['PHP_SELF']);
         $_SERVER['PHP_SELF']=str_replace("/xxxtest/bbd","",$_SERVER['PHP_SELF']);
         $_SERVER['PHP_SELF']=str_replace("/xxxtest/home","",$_SERVER['PHP_SELF']);
}
if(strrpos($_SERVER['SCRIPT_NAME'], '/')!=0){
     $_SERVER['SCRIPT_NAME']=str_replace("/xxxtest/webpages","",$_SERVER['SCRIPT_NAME']);
         $_SERVER['SCRIPT_NAME']=str_replace("/xxxtest/bbs","",$_SERVER['SCRIPT_NAME']);
         $_SERVER['SCRIPT_NAME']=str_replace("/xxxtest/home","",$_SERVER['SCRIPT_NAME']);
}
if(strrpos($_SERVER['REQUEST_URI'], '/')!=0){
     $_SERVER['REQUEST_URI']=str_replace("/xxxtest/webpages","",$_SERVER['REQUEST_URI']);
         $_SERVER['REQUEST_URI']=str_replace("/xxxtest/bbs","",$_SERVER['REQUEST_URI']);
         $_SERVER['REQUEST_URI']=str_replace("/xxxtest/home","",$_SERVER['REQUEST_URI']);
}
?>

如果你有更多的网站,一样在这里添加。

再假设你在xxxtest/bbs里又建一个文件夹为 ttt,对应 ttt.xxxtest.com
那么对于ttt的处理应该在bbs的上面
应该这个写
$PHP_SELF=str_replace("/xxxtest/bbs/ttt","",$PHP_SELF);
$PHP_SELF=str_replace("/xxxtest/bbs","",$PHP_SELF);

而不能写成

$PHP_SELF=str_replace("/xxxtest/bbs","",$PHP_SELF);
$PHP_SELF=str_replace("/xxxtest/bbs/ttt","",$PHP_SELF);
这样会出错的,注意顺序

把这个文件以utf-8格式保存,上传到空间根目录
进入空间管理后台,进入iis management ,重启下缓存就可以了 refresh apppool
目前最新版本的 dz pw wp均测试通过

另外不建议嵌套文件夹。建议每个站上面除了那个主站外最好不要有任何的站。一个域名下的主站和分站最好都是平行的关系

[ 本帖最后由 sniucom 于 2010-12-13 04:17 PM 编辑 ]

回答|共 2 个

sniucom

发表于 2010-12-13 16:12:29 | 显示全部楼层

安装测试
http://bbs.free358.com

ivye

发表于 2010-12-14 22:17:57 | 显示全部楼层

不能正常使用啊。。。

Warning: Cannot modify header information - headers already sent by (output started at D:\Hosting\7129749\html\auto_prepend_file.php:1) in

使用了之后出现这提示
您需要登录后才可以回帖 登录 | 注册

本版积分规则