Разрешить доступ PHP-файла к защищенной папке? - PullRequest
0 голосов
/ 02 февраля 2012
  • У меня есть сайт 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!");
    }
}
?>

Ответы [ 2 ]

0 голосов
/ 03 февраля 2012

Ну, я не пробовал это, но я думаю, что вы сделали бы это так:

   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;
    }
0 голосов
/ 02 февраля 2012

Это может быть растяжка, но если вы запускаете серверы в одной локальной сети, вы можете сделать это:

Использование .htaccess для маскировки домена?

Применяется здесь: (фуд для файла конфигурации 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)? Возможно, вы сможете полностью обойти прокси-метод.

...