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

2014-02-04 04:29:28 +08:00
 BulletTime
刚买了个VPS,环境是centos + lnmp,有一些文件php要调用,但这些文件比较敏感,不希望放在公开目录中。

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

请教如何做才能既做到文件与外界隔离的同时又能够被php调用呢?
4035 次点击
所在节点    PHP
12 条回复
icloudnet
2014-02-04 05:26:28 +08:00
slixurd
2014-02-04 09:23:11 +08:00
设置一下文件权限?
ritksm
2014-02-04 09:39:47 +08:00
在nginx上把敏感目录的location直接return 403好了...
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
2014-02-04 11:21:24 +08:00
ajax 设置Access-Control-Allow-Origin
BulletTime
2014-02-04 13:03:44 +08:00
@icloudnet
@slixurd
@ritksm
@Part
@wdkwdkwdk

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

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

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

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

这样 web访问这个文件夹的内容会被403,但是不影响include,也不影响在shell下执行 /usr/bin/php 来直接用解析器访问。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/98952

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX