我正在运行一些PHP Web应用程序,这些应用程序基本上是管理MySQL数据库内容的形式(添加,删除和更新)。现在我希望能够以编程方式插入数据,但我已将所有逻辑放在PHP中(在数据库端没有验证),我想重用我拥有的PHP逻辑。
我考虑过在搜索字符串中接收产品参数的新URI,但我只希望从服务器内部调用该端点时可以使用该端点(以避免外部用户调用它)。
我在Ubuntu 12.04中运行Apache服务器。我希望我能解释清楚
答案 0 :(得分:2)
您可以查看$_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();
}
考虑到如果您在同一台计算机上有反向代理,那么与脚本的所有连接都将来自代理,您将无法知道它们是来自localhost还是来自其他主机。 / p>
来自@ 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
答案 1 :(得分:2)
不要对您自己的服务器执行完整的HTTP请求。这是对资源的毫无意义的浪费,也打开了一大堆安全问题。
重写你的代码,使其可以作为一个函数正确调用,然后它就是一个简单的问题:
的functions.php:
<?php
function do_whatever_it_is_you_want() {
echo 'yo';
}
的index.php:
<?php
include('functions.php');
do_whatever_it_is_you_want();
现在,向全世界“公开”功能没有任何安全问题,因为它不是通过URL直接调用 - 只能通过您完全控制的代码来实现。