【问题标题】:Allow PHP file access to protected folder?允许 PHP 文件访问受保护的文件夹?
【发布时间】:2012-02-02 04:29:39
【问题描述】:
  • 我有一个网站 www.abc.domain.com 受 .htaccess 和 .htpasswd 保护。
  • 我有一个 callback.php 文件,需要访问 www.abc.domain.com 并检查数据。此文件位于其他服务器、其他域中。
  • 我使用 curl 来请求。

我看到 CURLOPT_USERPWD 可用于访问受保护的文件夹。但在我的 callback.php 文件中,它没有 CURLOPT_USERPWD。如何修改我的文件,添加 CURLOPT_USERPWD 以使其正常工作?

你可以在这里看到我的文件:

<?php
function callback_start() {
    $yoururl = "http://abc.domain.com";
    include "key.php";
    $pass_array['key'] = $key;
    $pass_array['domain'] = $_SERVER['SERVER_NAME'];

    function confirm($url, $data) {
        $options = array(CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false,
            CURLOPT_FOLLOWLOCATION => false, CURLOPT_AUTOREFERER => true,
            CURLOPT_CONNECTTIMEOUT => 50, CURLOPT_TIMEOUT => 50, CURLOPT_MAXREDIRS => 0,
            CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $data, CURLOPT_SSL_VERIFYHOST => 0, );

        $ch = curl_init($url);
        curl_setopt_array($ch, $options);
        $content = curl_exec($ch);
        curl_close($ch);
        return $content;
    }

    $info = confirm($yoururl . "/folder/index.php", $pass_array);
    if ($info['status'] == "2") {
        return die("Suspended!");
    }elseif($info['status'] == "3") {
        return die("Incorrect");
    }elseif($info['status'] != "1") {
        return die("Error!");
    }
}
?>

【问题讨论】:

  • 您是否尝试将其添加到您的 $options 数组中?
  • 我不确定如何使用curl_setopt($curlObj, CURLOPT_USERPWD, “$username:$password”); 作为数组。

标签: php apache .htaccess curl .htpasswd


【解决方案1】:

这可能有点牵强,但如果您在同一个本地网络上运行服务器,您可以这样做:

Using .htaccess to mask a domain?

在这里应用:(Apache 配置文件 httpd.conf 的食物)

<VirtualHost *:80>
    ServerName private.abc.com
    ProxyRequests     Off
    ProxyPreserveHost On
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
    ProxyPass / http://protected-site-local-ip:80/private/
    ProxyPassReverse / http://protected-site-local-ip:80/private/
  <Location />
    Allow from all
  </Location>
</VirtualHost>

由于 PHP 在本地系统上运行,因此访问代理站点不会有任何问题(无需密码,但只能从本地网络访问)。确保你没有给代理一个公共域。

我还没有尝试过,但是你可以从 PHP 直接转到本地网络上的文件吗? (例如http://10.149.2.1/www/private/stuff-you-need)?您也许可以完全绕过代理方法。

【讨论】:

    【解决方案2】:

    好吧,我还没有尝试过,但我的想法是你会这样做:

       function confirm($url, $data) {
            $options = array(CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false,
                CURLOPT_FOLLOWLOCATION => false, CURLOPT_AUTOREFERER => true,
                CURLOPT_CONNECTTIMEOUT => 50, CURLOPT_TIMEOUT => 50, CURLOPT_MAXREDIRS => 0,
                CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $data, CURLOPT_SSL_VERIFYHOST => 0, 
                CURLOPT_USERPWD => $username.":".$password, );
    
            $ch = curl_init($url);
            curl_setopt_array($ch, $options);
            $content = curl_exec($ch);
            curl_close($ch);
            return $content;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 2021-07-12
      相关资源
      最近更新 更多