2010-09-14 2 views
4

Мне нужен заполнитель формы javascript, который может обойти «ту же самую политику происхождения», что и большинство современных браузеров.Заполнение формы аннотации перекрестных доменов, обратный прокси

Я создал сценарий, который открывает нужный веб-сайт/форму в новом браузере. С обработчиком, возвращаемым методом window.open, я хочу получить входы с помощью WindowHandler.document.getElementById ('inputx') и заполнить их (доступ запрещен).

Возможно ли решить эту проблему с помощью Isapi Rewrite (official site) в IIS 6, действующего как обратный прокси? Если да, то как мне настроить обратный прокси?

Это как далеко я получил:

RewriteEngine on 
RewriteLogLevel 9 
LogLevel debug 

RewriteRule CarChecker https://the.actualcarchecker.com/CheckCar.aspx$1 [NC,P] 

переписывания работает, http://ourcompany.com/ourapplication/CarChecker, как видно в регистрации. Изнутри нашего сайта я могу запустить маркер, как если бы он был в нашем собственном домене. Кроме того, «та же политика происхождения» по-прежнему остается в силе.

Update,

я перестал использовать ISAPI Rewrite в качестве бесплатной версии не включает в себя компонент прокси. Я начал использовать url rewriter от Managed Fusion.

Моего текущий рабочий RewriteRule:

RewriteRule /MySecuredSite/CarChecker https://the.actualcarchecker.com [NC,P] 

Теперь я получаю ошибку: Базового соединения закрыто: Не удался установить доверительные отношения для SSL/TLS защищенного канала.

Я думаю, это происходит потому, что наш ssl-сертификат передается на сайт carchecker. Как настроить обратный прокси-сервер, чтобы передать сертификат сайта carchecker?

С уважением,

Michel

ответ

0

На какой стороне сервера язык вы используете? С его помощью вы можете создать прокси-сервер, который должен легко обойти политику домена один ...

PHP

<?php 
    $handle = fopen("https://the.actualcarchecker.com/CheckCar.aspx", "r"); 
    $contents = ''; 
    while (!feof($handle)) { 
     $contents .= fread($handle, 8192); 
    } 
    fclose($handle); 
    echo $contents; 
?> 

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

+0

Привет, Андрей, я использую asp.net. Я не хочу, чтобы экран царапал страницу, я хочу заполнить formvariables на нем и представить форму. У меня есть заполняющая часть, теперь мне нужна прокси-часть. –

+0

Возможно ли, что вы можете отправить данные любой формы непосредственно в целевой URL-адрес формы, минуя iframe? Или вам нужно отправить форму в iframe? –

+0

Я могу отправить данные формы непосредственно на адрес. Но целевая страница считывает некоторую переменную сеанса из вложенного представления. Если я сам опубликую его, у меня нет соответствующей сессии. Если сеанс не складывается, страница возвращает ошибку. Вот почему я хочу загрузить страницу (получить правильное и фактическое представление), заполнить и отправить ее. Я декодировал viewstate, но переменная сессии выглядит случайной. –

1

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

  1. Я не ASP разработчик, но я знаю, что, как вы упомянули, существует какая-то переменная viewstate, которая должна быть представлена ​​вместе с формой ASP. Я предполагаю, что это viewstate можно проверить, используя только поля формы, которые должны быть повторно отправлены. Это все, что я ожидал бы (если это не супер сложный), так как форма, которую получает браузер, - это все, что она отправляет обратно (вместе со значениями). Поэтому дело в том, что вам нужно иметь действительное представление в представлении, когда вы отправляете на страницу aspx, но, возможно, вы можете захватить любое представление, которое вы хотите от сервера, если поля формы, которые вы отправляете, идентичны.

  2. Вы можете написать веб-страницу, которая действует так же, как ваш браузер. Он может захватить страницу aspx (таким образом, создав действительное окно просмотра), тогда вы можете создать все поля, необходимые для POST, на страницу aspx, включая viewstate, и сделать это. Независимо от результатов можно вернуть с веб-страницы в браузер. Если у вас нет возможности модифицировать другой сервер, на данный момент я не вижу другого варианта, но, возможно, кто-то еще может быть более полезным.

  3. Если вы можете изменить другой сервер, у вас есть еще несколько вариантов. Один из них включает в себя трюк для передачи данных между фреймами. Если вы используете скрытый iframe для получения aspx-страницы, вы не сможете вернуть результат на родительскую страницу из-за ограничения между доменами. Но так как вы можете изменить другой сервер (работает на the.actualcarchecker.com), вы можете обойти это. Для этого просто заставьте этот сервер предоставить JavaScript для отправки формы асинхронно, а затем установите результат (сериализованный в строку) на window.name.

    Теперь, чтобы получить доступ к window.name из вашего домена, вы устанавливаете window.location в iframe на страницу своего домена, которая просто вызовет функцию, которую вы написали в JavaScript, загруженном в родительском окне. Как window.parent.process (window.name). Поскольку iframe загружает страницу в вашем домене, у нее будет доступ к window.name, которое не будет изменено, даже если вы изменили расположение окна. Затем функция process() в родительском окне может десериализовать строку, удалить скрытый iframe, показать результаты, сделать все, что вы хотите, и т. Д.

  4. Вы не сможете заполнить форму aspx, загруженную в скрытый iframe, если вы не сделаете подобный трюк на сервере другого домена. JavaScript этого сервера нужно будет прочитать из window.name, чтобы получить входные данные для заполнения формы. Однако, если на обоих серверах есть трюк, вам не нужно писать прокси, вы можете просто передавать данные через window.name.

+0

1 + 2, в основном, правильный. У меня уже была версия, которая работает в течение часа, а затем сеанс в режиме просмотра, и мне нужно получить новую. 3 + 4 Я не могу изменить другой сервер. +1 для вашего супер усилия, но я хочу, чтобы обратный прокси работал на +100 (более чистое решение, работает для всех сайтов). –

+0

Вы говорите, что время ожидания просмотра ... вы не можете просто захватить новое окно просмотра каждый раз, когда кто-то отправляет свою форму на вашу веб-страницу? то есть: кто-то отправляет свои поля вам, вы захватываете форму aspx (w/new view state), заполняете ее, отправляете обратно в aspx и возвращаете результат в браузер? Я не понимаю, почему вам нужно кэшировать/повторно использовать viewstate для нескольких POST-сообщений, но, возможно, есть некоторые вещи ASP, которые я не знаю. – dlongley

0

Почему бы вам не использовать подход JSONP? То есть используйте JavaScript, чтобы прочитать значения, введенные в форму, и отправили их на серверный обработчик через динамически генерируемый элемент <script> (<script> и img элементы могут ссылаться на ресурсы из внешних доменов).

var e = document.createElement("script"); 
e.setAttribute("type", "text/javascript"); 
e.setAttribute("src", "https://the.actualcarchecker.com/CheckCar.aspx?input1=value1&input2=value2"); 
document.getElementsByTagName('head')[0].appendChild(e); 

Скорее всего, вам не потребуется какая-либо серьезная URL переписывания на всех, если вы используете этот подход - просто убедитесь, что CheckCar.aspx возвращает действительный JSON.

У JQuery даже есть несколько удобных функций для этого: AFAIK $ .getJSON будет прозрачно переключаться с XHR на метод динамического вставки меток, если запрос является междоменным. Кроме того, он поддерживает указание обратных вызовов. См. jQuery docs и this Статья IBM для получения дополнительной информации.

Будет ли этот метод работать на вас?

+0

Интересное чтение. Но могу ли я увидеть внешний сайт во всплывающем окне и заполнить переменные формы? Например, можете ли вы загрузить Amazon.com во всплывающем окне и заполнить текстовое поле поиска и отправить? –

+0

Только если у вас есть контроль над сайтом, который вы открываете во всплывающем окне. Вы можете использовать iframe для этого. Таким образом, весь процесс выглядит следующим образом: 1) вы открываете форму actualcarchecker в iframe. 2) Эта форма использует описанный мной метод JSONP для отправки данных на сервер исходного домена. 3) Сервер исходного домена обрабатывает входные данные и передает результаты веб-клиенту. 4) Веб-клиент отображает результаты и закрывает iframe. – dpq

+0

Увы, у нас нет контроля над этим сайтом .. –

Смежные вопросы