隐藏来自外部请求的 PHP 脚本

隐藏来自外部请求的 PHP 脚本

(这是 Stack Exchange 上的第一个问题,欢迎评论/批评)

语境

我有一台 Debian 服务器

  • Flash Media Server (FMS) 监听端口 80 和 1935(默认)
  • Apache2 监听端口 8134

仅供参考,FMS 的用途之一是视频流。它使用 RTMP 协议。

据我了解:

当 FMS 请求在 1935 上被阻止时,会在 80 上回退。协议会发生变化并变为 HDS,即基于 HTTP 的 RTMP(速度较慢,但​​可以工作)。

FMS 需要 80 端口来实现该回退。

另一方面,Apache 提供 html、css……和 swf 文件,这些文件是客户端用于连接服务器的 flash 文件。

从客户端,您可以通过端口 80 访问这些文件。然后,FMS 将其无法处理的 HTTP 请求代理给 Apache。

这样Apache就不需要在80端口上进行配置,从而避免了80端口冲突。

到目前为止一切进展顺利。

但最近,我不得不为 FMS 添加 SQL 功能。而 FMS 本身并没有内置 SQL 连接。它几乎不能处理 HTTP 请求。因此,您必须使用另一种服务器端技术来处理 SQL。由于 Apache 已经存在,因此我想到了 PHP/MySQL。

所以我安装了 PHP 和 MySQL,并创建了一个网关 .php 脚本,它充当一个非常简单的数据访问层。

它的工作原理是,FMS 可以使用 json_encode 请求由 PHP/MySQL 生成的 JSON 数据,而且由于 FMS 语言是 ActionScript,读取 Javascript,我执行了 (new Function("return " + src))() 然后,我直接从数据库中获得了 js 对象。

非常简单,避免构建 J2EE 服务器或带回 Zend Framework 来使用 AMF。

现在我的安全问题来了:

.php 网关可供所有人访问,这意味着任何人都可以使用正确的 GET 参数提供 .php URL 并从数据库中读取数据,或者对其进行修改。

我想只允许 FMS 与网关通信。但我需要客户端仍然能够请求其他所有文件(html、css、swf...)。

答案1

使用 .htaccess 规则,类似于:

<Files ~ "\yourscript.php$">
    Order allow,deny
    Allow from your.fms.ip.address
    Deny from all
</Files>

显然,您需要进行一些更改才能应用到您的应用程序,但这是最简单的方法。

答案2

我最后添加了一些基本的身份验证用于网关脚本。

我决定用以下方式调用脚本

http://localhost/script.php?login=user&password=xyz&action=todo&param=something&...

如果知道凭证,每个人都可以访问此脚本,但现在设置了密码,您必须知道密码。因此,查找此 URL 会稍微复杂一些。由于此请求从服务器上的本地主机运行到本地主机,我认为现在的安全性很好,没有人可以“监听数据包”来找到它。也许它并不完美。欢迎发表评论。

相关内容