3

(注:はい、これはばかげた質問です。この質問に対する答えが「いいえ」であっても、私はまったく驚かないでしょう。つまり:)

私は、XML フラグメントに対して長時間の並列化不可能な計算を意図的に実行する XSLT スタイルシートを作成しました。ユーザーからの入力を必要としない一種の CAPTCHA として Web ブラウザーで使用される作業証明システムのコンポーネントとして意図されています。計算の結果は、非表示のフォーム要素として送信されます。ユーザーはデータをサーバーに POST します。フォームの内容は、計算された値が正しい場合にのみ受け入れられます。(計算は、サーバーがユーザーに関数への入力パラメーターを安価に提供できるように構成されており、サーバーは多くの作業を行わなくても結果を知ることができますが、ユーザーのマシンは、結果。)

変換は問題なく機能しますが、残念ながら、計算の進行中にブラウザーがハングします。私の目標は、ユーザーがブラウザを使用し続けている間にこの計算を実行することなので、これは容認できないほど迷惑な動作です。変換をバックグラウンドで実行し、実行中にブラウザを使用できるようにする方法はありますか? ソース XML フラグメントを iframe からロードすることも考えましたが、このアプローチを使用して変換をまったく機能させることができませんでした。これにさらに頭を悩ませる前に、誰か素晴らしいアイデアを持っているかどうかをここで尋ねてみようと思いました.ブラウザの動作を考えると根本的に不可能なことをしようとしているのなら、知っておくといいでしょう.

Javascriptでこれを行うことができることは知っていますが、そうする必要がないのはいいことです. 何か案は?

編集:皆さん、私は recaptcha.net やその他の代替手段について知っています。これは実験です。私の目標は、ユーザーにとって負担が大きすぎない方法で、理論的なアイデアを実践に還元できるかどうかを調べることです。私は代替の実装を探しているのではなく、Javascript を使用しない暗号学的に強力な CAPTCHA を実行する方法を探しています。(Javascript を使用したい場合は、Javascript ハッシュキャッシュの実装の 1 つを使用します。) 他のブラウザー ベースのチューリング完全言語は XSLT だけです。質問された精神で質問を検討してください。

4

2 に答える 2

2

ページがロードされたにXSLT 変換を実行し、その結果を Javascript なしで同じページのフォームで使用することはできません。IFrame ソリューションが機能しない理由はわかりませんが、機能したとしても、結果をページのフォームにインポートするには Javascript が必要です。

私のアドバイスは、小さくて高速な Javascript ベースのシステムを使用し、Javascript が無効になっている場合は reCAPTCHA にフォールバックすることです。Proof-of-work を CPU 集中型にする必要はありません。カスタム ソリューションを使用すると、大部分 (すべてではないにしても) のスパムボットを排除できます。

たとえば、ページに次のようなものを含めることができます

<input type="hidden" name="a" value="123" />
<input type="hidden" name="b" value="456" />
<input type="hidden" name="c" />

Javascript で c の値を (a+b) に設定します。ボット作成者は、非常に単純な CAPTCHA を解決するために、ボットをサイトに合わせて調整する必要があります。もしそうなら (彼らはそうしません)、c を取得するために a と b に対して実行する操作の種類を定義する新しいフィールドを追加します。再び適応する場合は、フィールドの名前を変更します。おそらく、あなたのサイトが Alexa のトップ 10 に入らない限り、それらは適応しません。

于 2009-08-05T02:40:49.040 に答える
1

私はiframeでxsltを使用していますが、問題なく動作します。おそらく、関連のない問題が発生している可能性があります。

ユーザーの操作やJavaScriptを使用せずにマシンが特定の値を送信するようにする場合は、メタリフレッシュの使用を検討してください。

  1. xslt計算エンジンへのスタイルシート処理ディレクティブを含むxmlファイルを取得するURLを指す小さな非表示のiframeをWebページに含めます
  2. 出力がURLにエンコードされた計算トークンを使用してURLへのリダイレクトを生成するようにxsltファイルを設計します。つまり、URLを計算します。

    <meta http-equiv = "refresh" content = "0; url = http: //xyz.abc/captcha?......">

省略されたセクションにトークンが含まれている場合。原則として、それは機能するはずです。

一方で、xsltがこのようなものに非常に役立つかどうかは真剣に疑っています。時間がかかる場合、ブラウザは計算を中止することがあります。iframeでもブロッキング動作が発生する可能性があり、シングルコアシステムでは非ブロッキング動作でも効果的にブロッキングが発生する可能性があります。XSLTエンジンの違いにより、すべてのエンジンが十分に高速に実行される変換を見つけるのは難しいでしょう。ほぼ瞬時に炎上します。

javascriptはこれにはあまり適していないと思いますし、XSLTはおそらくさらに適切ではありません。そのような計算が本当に必要な場合は、Silverlightの方が適している可能性があります-少なくとも、どこでも適度に高速に実行されるコードを記述できますが、将来のエンジンは簡単にはなりません(ネイティブ速度に十分近いため、コードを記述できるはずです) CPUにとってはかなり最適に近いです-確かに10倍以内に入ることができますが、これはおそらくjavascript / XSLTでは言えません)。

于 2009-08-05T14:25:19.570 に答える