我正在运行一些 PHP Web 应用程序,它们基本上是管理 MySQL 数据库内容(添加、删除和更新)的表单。现在我希望能够以编程方式插入数据,但是我已经将所有逻辑都放在了 PHP 中(在数据库端没有验证)并且我想重用我拥有的 PHP 逻辑。
我想过有一个新的 URI 来接收查询字符串中的产品参数,但我只希望该端点在从服务器内部调用时可用(以避免外部用户调用它)。
我在 Ubuntu 12.04 中运行 Apache 服务器。我希望我解释得很好
可以看一下$_SERVER['REMOTE_ADDR']
,是客户端连接php脚本的地址。
if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') {
// connection from localhost, proceed
} else {
// connection from the outside, deny
header('403 Forbidden');
echo "You are not allowed to be here.";
die();
}
考虑到如果你在同一台机器上有一个反向代理,那么到你的脚本的所有连接都将来自代理,你将无法知道它们是来自本地主机还是来自另一个主机。
@x4rf41 的评论也很好,从网络服务器层进行管理(尽管反向代理也有同样的问题)。
另一种选择是命令行脚本而不是网页,您可以在其中将数据作为参数传递给脚本:
#!/usr/bin/env php
<?php
// total number of params is in $argc (minus 1, for the script name)
// param 1 in $argv[1]
// param 2 in $argv[2]...
// argv[0] is reserved for the name of the script
if ($argc != 5) {
fprintf("STDERR: %s param1 param2 param3 param4\n", $argv[0]);
exit(1);
}
// do your logic here
不要向您自己的服务器发出完整的 HTTP 请求。这是对资源的毫无意义的浪费,而且还会引发一整套安全问题。
重写您的代码,使其可以作为函数正确调用,那么这很简单:
函数.php:
<?php
function do_whatever_it_is_you_want() {
echo 'yo';
}
索引.php:
<?php
include('functions.php');
do_whatever_it_is_you_want();
现在,将功能“公开”给世界没有任何安全问题,因为它不是通过 URL 直接调用的——只能通过您完全控制的代码来调用。