【问题标题】:Create a local .php page on my server在我的服务器上创建一个本地 .php 页面
【发布时间】:2013-08-03 22:19:26
【问题描述】:

我正在运行一些 PHP Web 应用程序,它们基本上是用于管理 MySQL 数据库内容(添加、删除和更新)的表单。现在我希望能够以编程方式插入数据,但是我已经将所有逻辑都放在了 PHP 中(在数据库端没有验证)并且我想重用我拥有的 PHP 逻辑。

我想过有一个新的 URI 来接收查询字符串中的产品参数,但我只希望该端点在从服务器内部调用时可用(以避免外部用户调用它)。

我在 Ubuntu 12.04 中运行 Apache 服务器。我希望我解释得很好

【问题讨论】:

  • 您可以使用 htaccess 限制对某些文件或目录的访问。先看看这个:stackoverflow.com/questions/4400154/…你也可以检查$_SERVER['REMOTE_ADDR']
  • 你可以从命令行运行 PHP,或者你可以创建一个只监听 localhost 的虚拟主机,以阻止任何外部访问它。

标签: php apache


【解决方案1】:

你可以看一下$_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

【讨论】:

  • 这样我就可以拥有一个与服务器本身完全分离的 .php 脚本,“包含”添加操作所需的服务器 .php 文件并像通常的脚本一样调用它(传递参数 ovr 命令行,在脚本中解析并调用方法添加到数据库中)?
  • @rnunes 是的,就是这样
【解决方案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 直接调用 - 只能通过您完全控制的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多