PDA

Просмотр полной версии : Перехват выполнения чужого скрипта



Jevgenij
01.09.2004, 11:45
Как обработать средствами РНР результат выполнения чужого скрипта, вызванного из формы. Например:

<form action=http://somesite.net? method=post>
<input type=text name=USERNAME>
<input type=submit name=submit value='Login'>
</form>

Проблема в том, что чужой скрипт генерит HTML, где в одном из hidden полей хранится пароль (ну не умеют их программеры сессии создавать!).

chur
01.09.2004, 16:41
Из формы вызываешь свой скрипт, который в свою очередь вызывает чужой скрипт, делаешь с результатом все что надо и выдаешь пользователю.

Jevgenij
03.09.2004, 14:17
Идея ясна. Вот только как его вызвать и передать POST переменную USERNAME? Просто проблема в том, что я пробовал сделать это через сокеты (очевидно это не совсем верный путь).
Да, к слову - привет, земляк!

chur
03.09.2004, 17:06
В Perl есть модули - эмуляторы агентов пользователя (броузеры). Там все делается лекго и просто, хоть GET, хоть POST. Как в PHP это оформить я не знаю.
Прямо через сокеты, впрочем, тоже не большая проблема.

Jevgenij
03.09.2004, 17:38
В принципе понял - мыслил я правильно, через сокеты можно. Как я понял, надо будет этот самый POST передать с помощью socket_write(). Я полазил по нету и нашел следующую вещь:

POST http://swig.stanford.edu/ISPACE/ads.accesspt.AggregatorHttp HTTP/1.1
X-User-Id: adsuser
X-Cmd-Tag: photoalbum
X-Bundle-Id: picture1
Content-Type: text/plain
Content-Length: 26

Если честно - не все из этого я понял. Как ее переделать под свои нужды? У меня 2 POST переменные PASSWORD и USERNAME. Может так?

POST http://somesite.net/script.exe? HTTP/1.1
USERNAME: $HTTP_POST_VARS[USERNAME]
PASSWORD: $HTTP_POST_VARS[PASSWORD]
Content-Type: text/plain
Content-Length: ??????? (здесь надо подсчитать длину логина и пароля?)

Вообще-то я по сетям и железу специализируюсь... А тут блин на работе привязались - ну никак не отвертется;)

chur
04.09.2004, 12:21
Должно выглядеть примерно так:

POST /script.exe HTTP/1.1
Host: somesite.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 31

PASSWORD=mypass&USERNAME=myuser
Перед передачей данных обязательно должна быть пустая строка.

Jevgenij
04.09.2004, 14:29
Спасибо! Вот теперь все понятно! Это была последняя загвоздка.. Вечером попробую реализовать![/b]

Jevgenij
15.09.2004, 01:47
Sorry, 4to na latinice, s laptja pishu...

Vot ono, reshenije! es4o raz spasibo churu;)

<?php
echo "Starting...
";
$vars = "log=tester&pass=qwerty";
$varlen = strlen($vars);
$sock = fsockopen ("127.0.0.1", 80, $errno, $errstr);

// Peredajem post scriptu proga.exe
fputs($sock, "POST /cgi/proga.exe? HTTP/1.0\r\n");
fputs($sock, "Host: www.somesite.net\n");
fputs($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($sock, "Content-length: {$varlen}\r\n");
fputs($sock, "Accept: */*\r\n");
fputs($sock, "\r\n");
fputs($sock, "$vars\r\n");
fputs($sock, "\r\n");
// Videljajem header
$headers = "";
while ($str = trim(fgets($sock, 4096)))
$headers .= "$str\n";
// soxranjajem rezuljtat ispolnenija proga.exe v peremennuju $html
$html="";
while (!feof($sock)) { $html .= fgets($sock,1024); }
fclose ($sock);
echo $html;
?>