V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BulletTime
V2EX  ›  PHP

在VPS里如何实现php能调用但不公开访问?

  •  
  •   BulletTime · 2014-02-04 04:29:28 +08:00 · 4012 次点击
    这是一个创建于 3952 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚买了个VPS,环境是centos + lnmp,有一些文件php要调用,但这些文件比较敏感,不希望放在公开目录中。

    用/root/vhost.sh建立的网站,绑定的整个目录都是公开的,把文件放到这个目录外面php又调用不到(貌似属于跨站了)。

    请教如何做才能既做到文件与外界隔离的同时又能够被php调用呢?
    12 条回复    1970-01-01 08:00:00 +08:00
    icloudnet
        1
    icloudnet  
       2014-02-04 05:26:28 +08:00 via iPad
    slixurd
        2
    slixurd  
       2014-02-04 09:23:11 +08:00
    设置一下文件权限?
    ritksm
        3
    ritksm  
       2014-02-04 09:39:47 +08:00
    在nginx上把敏感目录的location直接return 403好了...
    Part
        4
    Part  
       2014-02-04 09:58:33 +08:00
    所谓的“调用”是include? include 可以任意目录的。

    通常的做法是
    a.php
    !defined('INNER') && exit('Access Denied');

    b.php
    define('INNER', true);
    include('a.php');
    wdkwdkwdk
        5
    wdkwdkwdk  
       2014-02-04 11:21:24 +08:00
    ajax 设置Access-Control-Allow-Origin
    BulletTime
        6
    BulletTime  
    OP
       2014-02-04 13:03:44 +08:00
    @icloudnet
    @slixurd
    @ritksm
    @Part
    @wdkwdkwdk

    敏感文件不一定是php文件,以前用虚拟主机的时候根目录下有一堆目录,只有home或者www才能公开访问,但可以file_get_contents之类的读取上级不公开目录的文件,就是想实现这种效果
    Sunyanzi
        7
    Sunyanzi  
       2014-02-04 17:02:16 +08:00
    随便创建别的一个什么目录 ...

    比如你的网站根是 /var/www ... 那么在这个目录之外的所有区域都是 web 不可见的 ...

    你可以创建 /var/private ... 然后 chmod 这个目录使得 php 可读 ...

    这时候就可以通过在脚本里写 file_get_contents( '/var/private/foo.bar' ); 取得文件内容了 ...
    ck65
        8
    ck65  
       2014-02-04 21:23:52 +08:00
    if (!isset($argv)) die();
    vibbow
        9
    vibbow  
       2014-02-04 21:52:20 +08:00
    @ck65 if (PHP_SAPI === 'cli')
    oott123
        10
    oott123  
       2014-02-04 23:03:47 +08:00 via Android
    把网站放到./www/wwwroot里,open_base_dir限制到./www里不就好了
    不过最好还是3楼的方案~
    wdlth
        11
    wdlth  
       2014-02-05 19:42:27 +08:00
    可以在Nginx或者PHP代码设置一些认证,比如最简单的Basic Auth。
    lyragosa
        12
    lyragosa  
       2014-02-24 10:26:08 +08:00
    设置某个文件夹的htaccess(我用的apache,nginx应该也有类似的),为Deny from all

    这样 web访问这个文件夹的内容会被403,但是不影响include,也不影响在shell下执行 /usr/bin/php 来直接用解析器访问。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   934 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:40 · PVG 05:40 · LAX 13:40 · JFK 16:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.