2009-07-07 2 views
2

Мне нужно создать прокси-скрипт, который может получить доступ к странице, скрытой за экраном входа. Мне не нужен прокси-сервер для «имитации» входа в систему, вместо этого HTML-страница входа в систему должна отображаться пользователю обычно, а все файлы cookie и HTTP GET/POST передаются через прокси-сервер на сервер, поэтому логин должен быть аутентичный.Как написать простой прозрачный прокси PHP?

Я не хочу логин/пароль, мне нужен только доступ к исходному HTML код страницы генерируется после лесозаготовок в.

ли здесь кто-нибудь знает, как это можно сделать? Это легко?

Если нет, где я начинаю? * (Я в настоящее время с помощью PHP) *

ответ

1

То, что вы говорите о том, доступ к страницам, на которые вы должны идентифицировать себя.

Вот несколько вещей, которые должны быть установлены:

  • вы не можете просматривать эти страницы без проверки подлинности самостоятельно.
  • Если веб-сайт (HTML-код которого вы хотите увидеть) поддерживает только вход в систему в качестве метода проверки подлинности, вам нужно будет имитировать логин, отправив (имя пользователя, пароль) через POST/GET, в зависимости от обстоятельств:
  • если веб-сайт позволит вам идентифицировать себя другими способами (например, LDAP, Kerberos и т.д.), то вы должны сделать это

ключевым моментом является то, что вы не можете получить доступ без аутентификации себя первым.

Что касается языка, то это довольно удобно в PHP. И, как указывают теги на вопросе, вы используете правильные инструменты для выполнения этой работы.

Одна вещь, которую я хотел бы знать, это то, почему вы называете ее «прокси»? хотите ли вы показывать контент другим пользователям?

EDIT: [обновление после комментариев]

В этом случае используйте PHProxy. Он делает то, что вы хотите, наряду с множеством других функций.

+0

Я думаю, вы немного смущены. Мой прокси-скрипт НЕ будет автоматически загружаться, загружая данные GET/POST на страницу входа в систему, но вместо этого я (1) прозрачно показываю HTML-адрес исходной учетной записи посетителя прокси (2), посетитель будет использовать его имя пользователя/пароль (3) Я передам данные запроса на исходный сервер входа, чтобы я не вмешивался. –

+0

Ох. ответ обновлен. – jrharshath

0

Я бы рекомендовал использовать Curl (php library, который может понадобиться активировать на вашем php.ini) Он используется для управления удаленными веб-сайтами, обработки файлов cookie и любых параметров http, которые вам нужны. Вам нужно будет написать свой прокси-сервер на основе веб-страниц, которые вы нажимаете, но это сделает работу.

+0

, вы можете столкнуться с проблемами аутентификации, если ожидается, что запрос на вход будет получен с определенной ссылочной страницы, поэтому обязательно учтите это при использовании curl – bumperbox

3

Попросите свой PHP-скрипт указать нужный URL-адрес и перепишите все ссылки и формы, чтобы указать на ваш php-скрипт. При получении запросов к скрипту с параметром URL пересылайте его на удаленный сервер и повторяйте.

Вы не сможете поймать все запросы JavaScript, (если вы не реализовали часть JavaScript вашего «прокси»)

Например: типов пользователей http://example.com/login.php в вашу форму прокси.

отправить пользователю http://yoursite.com/proxy.php?url=http://example.com/login.php

убедитесь, UrlEncode параметр "http://example.com/login.php"

В http://yoursite.com/proxy.php, вы делаете запрос HTTP на http://example.com/login.php

$url = $_REQUEST['url']; 

// make sure we have a valid URL and not file path 
if (!preg_match("`https?\://`i", $url)) { 
    die('Not a URL'); 
} 

// make the HTTP request to the requested URL 
$content = file_get_contents($url); 

// parse all links and forms actions and redirect back to this script 
$content = preg_replace("/some-smart-regex-here/i", "$1 or $2 smart replaces", $content); 

echo $content; 

Обратите внимание, что /некоторые смарт -regex-here/i на самом деле является выражением регулярного выражения, которое вы должны написать для разбора ссылок и т. д.

Пример просто проксирует тело HTTP, вы можете проксировать HTTP-заголовки. Вы можете использовать функции fsockopen() или PHP-потока в PHP5 + (stream_socket_client() и т. Д.)

+4

nonononono, с которым вы можете получить доступ к локальным файлам. /proxy.php?url=/etc/passwd –

+1

Очень верно! ^^ Используйте curl или fsockopen вместо file_get_contents. Или дезинфицируйте $ url; – bucabay

+0

Спасибо за исправление, -1 -> +1 –

2

Вы можете проверить http://code.google.com/p/php-transparent-proxy/, я сделал это, потому что задал себе тот же самый вопрос, и я решил сделать его. Это под лицензией BSD, так что получайте удовольствие :)

+0

Я пытался использовать его с файлами, но не работал. Я не могу загружать файлы с помощью скрипта. Я считаю, что это связано с ограничениями Post и Get.Or я ошибаюсь? Может ли он использоваться и с изображениями? Написал вопрос [здесь] (http://stackoverflow.com/questions/14832334/create-a-http-proxy-in-php-for-uploading-images-using-iframe/14834851#comment20815984_14834851) – coderunner