假设我拥有所有php功能的domain.com/php/,然后我与domain.com/frontend/的前端开发人员共享一个ftp帐户,现在前端可以完成他们的工作并调用“.. / php /“函数。我可以安全地假设我的PHP代码受到保护吗?或者另一种询问方式,他们有没有看到php源代码或以某种方式复制/包含这些文件然后显示它们?
答案 0 :(得分:0)
您可以通过监禁用户来限制用户:
http://allanfeid.com/content/creating-chroot-jail-ssh-access
这样他们就可以访问文件夹来创建文件。然后只需向他们提供需要PHP文件的路径。或者创建一个对象或PHP函数模板以允许它们调用访问
伪代码:
class GlobalPaths
function getPathToThisResource(return string)
答案 1 :(得分: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接口只需要对localhost可用!最重要的是,对于您的用例:前端的开发人员无需读取源代码。由于它不可公开访问,因此您可以考虑使用类似PHPDaemon的内容作为后端,因为这样可以更轻松地构建适当的REST接口。