2013-01-18 48 views
-1

说,我有我所有的PHP函数domain.com/php/,然后我跟前端开发者domain.com/frontend/共享FTP帐户,现在前端能做他们的工作,并调用“../php/”功能。这是安全的假设我的PHP代码受到保护?或者另一种方式问,是否有他们看到PHP源代码或以某种方式复制/包含这些文件,然后显示它们?隐藏后端代码

+3

如果他们可以使用这些功能,当你给予某人ftp访问权限时,即使你将其限制在某个目录下,也总是有办法获得源代码 – Stefan

+0

- 他们仍然可能执行脚本或程序来执行许多操作你的系统。其中一件事是读取文件。有一些方法可以限制他们的能力,但这很复杂,除非你对这个领域非常熟悉,否则你应该认为他们可以做大部分相同的事情。 – goat

+0

...与前端开发人员共享* FTP *帐户?我认为你需要修改你的协作模型。开发人员工作代码并将其提交到某个存储库(git,svn,您将其命名)。什么时候准备好了,一个人部署它。应该有你的工作场所一定程度的信任,即使你限制FTP,开发商仍然可以使用像'ReadFile的(“../ PHP /有些难看码 - 我想做至hide.php”);' – Lekensteyn

回答

0

您可以通过他们关押到一个文件夹限制用户:

http://allanfeid.com/content/creating-chroot-jail-ssh-access

这样,他们将有机会获得该文件夹中创建的文件。然后简单地给他们PHP文件所需的路径。或创建一个对象或PHP函数模板,让他们呼叫接入

伪代码:

class GlobalPaths 
function getPathToThisResource(return string) 
0

您可以使用UNIX帐户系统,使不可读某些用户的文件。问题是,如果PHP文件可以包含对方,他们可以读取其他来源。您可以使用RPC系统来隐藏后端代码。前端只会与RPC接口通信,并且不需要读取后端代码的来源。

例如,在前端:

<?php 
error_reporting(-1); 
function ask_backend($cmd, $args) { 
    $decoded = json_decode($data = file_get_contents("http://localhost:8800/backend/rpc.php?cmd=" . urlencode($cmd) . "&args=" . urlencode(json_encode($args))),true); 
    if ($decoded === null) throw new Exception("invalid data from backend: " . $data); 
    if ($decoded["status"] !== "ok") throw new Exception("error occurred on backend: " . $data); 
    return $decoded["msg"]; 
} 
?> 
The backend says: 
<?php 
$res = ask_backend("greeter", ["peter"]); 
var_dump($res); 
?> 

在后台,你可以有rpc.php如下:

<?php 
error_reporting(-1); 
$cmd = $_GET["cmd"]; 
$gargs = json_decode($_GET["args"],true); 
$cmds = [ 
    "greeter" => function($args) { 
     list($name) = $args; 
     return "hello " . $name; 
    } 
]; 
$res = ($cmds[$cmd]($gargs)); 
$res = json_encode(["status"=>"ok", "msg"=>$res]); 
echo $res; 
?> 

这个实现的缺点是,你只能通过JSON序列化对象。当然,您可以使用Protocol Buffers进行序列化。你甚至不需要使用HTTP,但是我使用过,因为如果你正在运行PHP,你可能已经有了一个HTTP服务器。

请记住,RPC接口只需要提供给本地主机!最重要的是对于你的用例:前端开发者不需要读取源代码。由于它不是公开访问的,因此可以考虑在后端使用诸如PHPDaemon之类的东西,因为这样可以更轻松地构建适当的REST界面。