gpt4 book ai didi

php - 在运行 Cronjobs 之前将用于 Cronjobs 的 PHP 脚本中的 IP 地址列入白名单的风险是什么

转载 作者:行者123 更新时间:2023-12-04 10:04:00 24 4
gpt4 key购买 nike

我的服务器上有一些 PHP 脚本,用于定期 cron 作业(例如,用于日常交流和更新排行榜)。

为了防止外人手动运行这些脚本(例如在浏览器中运行 http://url/script.php),我在运行实际脚本之前添加了以下代码来检查 IP 地址。其中XX.XX.XX.XX代表我自己网络的IP地址。

    $remote = isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : '127.0.0.1';
$whitelist = array('XX.XX.XX.XX', '127.0.0.1');

if (!in_array($remote, $whitelist))
{
exit;
}

所以现在我有以下问题:
  • 这有多安全?
  • 有哪些风险?
  • 我怎样才能使它更安全?
  • 还有其他(更好的)解决方案吗?

  • PS。我之前的问题已关闭,因为有人认为此问题与 PHP IP Address Whitelist with Wildcards 重复.但我不是这样的!这个问题是关于在白名单中使用通配符,而这个问题是关于这个解决方案的安全性和风险。

    最佳答案

    所提出的方法并不完全安全。

    PHP 充当文本预处理器,这意味着在 Web 服务器网关错误的情况下,脚本内容可以使用 mime 类型的 text/html 发送,这存在泄露敏感数据的风险,例如 SQL 数据库的密码或(s)ftp 帐户。

    如果脚本中控制的 IP 地址是共享(或动态传输)地址,则公开发布的管理脚本也存在未经授权执行的风险。 Cron 脚本是使用 php-cli 执行的,因此任何事情都不需要 Web 服务器网关,如果脚本在公共(public)目录之外,则不需要在脚本中进行 IP 分析。

    使用例如远程执行curl 可能是将管理脚本放置在 www 服务器的公共(public)空间中的唯一原因。这通常是一个弱解决方案,因为脚本会使用其他设置执行 php 解释器(而不是 php-cli),通常执行时间非常有限。但是,如果出于某种原因有必要,它应该位于单独的目录中,使用 .htaccess(和/或 .iptables)将访问限制为特定的 IP 地址,并使用 htpasswd(基本身份验证)分配用户名和密码。

    理想的情况是www服务器的公共(public)目录(以下简称public)只包含静态内容(img、css、js...文件)和位于父目录的应用触发器。示例结构是:

    /home/username/domainname/(apps,crons,public,tmp)

    应用程序目录应包含所有应用程序文件和目录。公共(public)目录应仅包含静态内容(用于某些子目录中的订单)和指向应用程序主文件的符号链接(symbolic link),可以使用以下命令获得:
    ln -s ../apps/app.php index.php

    某些服务器配置不允许使用符号链接(symbolic link)。然后您可以使用包含以下内容的 index.php 文件:
    <?php
    include('/home/username/domainname/apps/app.php');

    这个解决方案有点糟糕,因为在网关发生故障的情况下,目录结构会被显示出来。但是,敏感数据仍然是安全的,因为 Web 服务器无法显示不存在的文件的内容。

    假设 php 文件本身位于公共(public) Web 服务器之外,所呈现的 IP 分析可用于显示授权地址的部分内容。但是,如果这些是整个网站,我更愿意使用 iptables 或 .htaccess 来管理对它们的访问。

    关于php - 在运行 Cronjobs 之前将用于 Cronjobs 的 PHP 脚本中的 IP 地址列入白名单的风险是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61681470/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com