4

最新のブラウザーが実装している「同一オリジン ポリシー」をバイパスできる JavaScript フォーム フィラーが必要です。

新しいブラウザーで目的の Web サイト/フォームを開くスクリプトを作成しました。window.open メソッドによって返されるハンドラーを使用して、入力を theWindowHandler.document.getElementById('inputx') で取得し、入力します (アクセスが拒否されました)。

リバース プロキシのように動作する IIS 6 でIsapi Rewrite (公式サイト) を使用して、この問題を解決することはできますか? その場合、リバース プロキシをどのように構成しますか?

これは私が得た距離です:

RewriteEngine on
RewriteLogLevel 9
LogLevel debug 

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

ロギングで明らかなように、書き換えはhttp://ourcompany.com/ourapplication/CarCheckerで機能します。会社のサイト内から、まるで自分のドメインにあるかのように carchecker を実行できます。ただし、「同一オリジン ポリシー」は引き続き有効です。

更新,

無料版にはプロキシ コンポーネントが含まれていないため、Isapi Rewrite の使用をやめました。Managed FusionのURL リライターを使い始めました。

私の現在の作業リライタルール:

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

今、私はエラーを受け取ります:基になる接続が閉じられました: SSL/TLS セキュア チャネルの信頼関係を確立できませんでした。

これは、 ssl-certificate が carchecker サイトに渡されるために発生すると思います。carchecker サイトの証明書が渡されるようにリバース プロキシを構成するにはどうすればよいですか?

よろしく、

ミシェル

4

3 に答える 3

1

いくつかの詳細を知らずに、直面している制限のいくつかと、利用できるいくつかのトリックをリストすることが役立つかもしれないと判断しました。

  1. 私は ASP 開発者ではありませんが、おっしゃったように、ASP フォームと共に送信する必要があるある種のビューステート変数があることは承知しています。このビューステートは、再送信されるフォーム フィールドのみを使用して検証できると想定しています。ブラウザーが受け取るフォームは (値と共に) 送り返すだけなので、(非常に複雑でない限り) 私が期待するのはこれだけです。つまり、aspx ページに送信するときに有効なビューステートが必要になりますが、送信するフォーム フィールドが同一である限り、必要なビューステートをサーバーから取得できる可能性があります。

  2. ブラウザと同じように動作する Web ページを作成できます。aspx ページを取得して (有効なビューステートを確立)、ビューステートを含む aspx ページへの POST に必要なすべてのフィールドを作成し、それを行うことができます。結果が何であれ、Web ページからブラウザに返すことができます。他のサーバーを変更する能力がない限り、現時点では別のオプションはありませんが、他の誰かがより役立つ可能性があります.

  3. 他のサーバーを変更できる場合は、他にいくつかのオプションがあります。そのうちの 1 つは、iframe 間でデータを渡すためのトリックです。非表示の iframe を使用して aspx ページを取得している場合、クロスドメインの制限により、結果を親ページに戻すことはできません。ただし、他のサーバー (the.actualcarchecker.com で実行されている) を変更できるため、これを回避できます。これを行うには、そのサーバーに JavaScript を提供させてフォームを非同期的に送信し、その結果 (文字列にシリアル化) を window.name に設定します。

    ドメインから window.name にアクセスするには、iframe の window.location をドメイン上のページに設定します。このページは、親ウィンドウに読み込まれた JavaScript で記述した関数を呼び出すだけです。window.parent.process(window.name) のように。iframe はドメインにページをロードしたため、ウィンドウの場所を変更しても変更されていない window.name にアクセスできます。次に、親ウィンドウの process() 関数は、文字列を逆シリアル化したり、非表示の iframe を削除したり、結果を表示したり、必要なことを実行したりできます。

  4. 他のドメインのサーバーで同様のトリックを実行しない限り、非表示の iframe に読み込まれる aspx フォームに入力することはできません。そのサーバーの JavaScript は、window.name から読み取り、フォームに入力する入力を受け取る必要があります。ただし、両方のサーバーがトリックに参加している場合は、プロキシを作成する必要はなく、window.name を介してデータを渡すだけで済みます。

于 2010-09-23T17:51:07.553 に答える
0

どのサーバー側言語を使用していますか?これを使用すると、1つのドメインポリシーを簡単にバイパスするプロキシを作成できます...

PHP

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

他の言語でも同様のプロセスになると思います。

于 2010-09-22T08:18:00.757 に答える
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のドキュメントこのIBMの記事を参照してください。

この方法はあなたのために働きますか?

于 2010-09-27T07:58:00.137 に答える