Frage

(N. B .: Ja, das ist eine lächerliche Frage, und ich werde ganz überrascht sein, wenn die Antwort auf diese Frage „nein“ Das heißt:.)

Ich habe einen XSLT-Stylesheet geschrieben, die absichtlich eine lange, unparallelizable Berechnung auf einem XML-Fragmente führt. Es ist, als Bestandteil eines proof of work verwendet werden in einem Web-Browser als eine Art von CAPTCHA, die von dem Benutzer keine Eingabe erforderlich - das Ergebnis der Berechnung wird als verborgenes Formularelement, wenn die Benutzer POSTs Daten an den Server gesendet. Die Formularinhalte werden nur akzeptiert, wenn der berechnete Wert korrekt ist. (Die Berechnung ist so strukturiert, dass der Server kostengünstig den Benutzer mit Eingabeparameter an eine Funktion zur Verfügung stellen kann, und der Server weiß, das Ergebnis ohne eine Menge Arbeit zu tun zu haben, aber die Maschine des Benutzers hat Zyklen verbringen die bestimmen Ergebnis).

Die Transformation funktioniert gut, aber leider hängt der Browser während der Berechnung los ist. Da mein Ziel, diese Berechnung am Laufen zu haben, während der Benutzer den Browser zu verwenden, weiter, dann ist dies unakzeptabel ärgerlich Verhalten. Gibt es eine Möglichkeit der Transformation in den Hintergrund und lassen Sie den Browser verwendet werden, während es läuft? Ein Gedanke, den ich die Quelle XML-Fragment aus einem Iframe geladen hatte, war zu, aber ich habe nicht in der Lage gewesen, die Transformation zu erhalten mit diesem Ansatz überhaupt zu arbeiten. Ich dachte, ich würde hier fragen, um zu sehen, ob jemand irgendwelche gute Ideen hat vor meinem Kopf gegen diese viel weiter schlagen -. Wenn ich versuche, etwas zu tun, dass die Art und Weise Browser gegeben grundsätzlich unmöglich ist, arbeiten, wäre es schön zu wissen,

Ich weiß, dass ich dies in Javascript tun könnte, aber es wäre schön, nicht zu müssen. Irgendwelche Ideen?

EDIT: Leute, ich weiß, über recaptcha.net und andere Alternativen. Dies ist ein Experiment . Mein Ziel ist es, herauszufinden, ob eine theoretische Idee reduziert werden kann, einen Weg zu üben, die nicht zu beschwerlich für den Benutzer ist. Ich bin nicht auf der Suche nach alternativen Implementierungen, ich bin für einen Weg suchen, eine kryptographisch starke CAPTCHA zu tun, die Javascript nicht einbeziehen. (Wenn ich will Javascript verwenden, ich einen des Javascript hashcash Implementierungen verwenden würde.) Die einzige andere Browser-basierte Turing-complete Sprache aus ist es XSLT. Bitte beachten Sie die Frage in dem Geist, in dem sie aufgefordert wurde.

War es hilfreich?

Lösung

Ich benutze Xslt in einem Iframe, und es funktioniert gut - es gibt wahrscheinlich einige unabhängige Problem Sie laufen in

.

Wenn Sie das Gerät wünschen, einen bestimmten Wert ohne Zutun des Benutzers und ohne Javascript einreichen, prüfen, mit Meta-Refresh mit:

  1. Fügen Sie eine kleine, versteckte iframe auf der Webseite, die auf eine URL verweist Ihre XML-Datei erhalten, die eine Sheet Verarbeitungsrichtlinie Ihre Xslt Rechenmaschine umfasst
  2. Engineer die XSLT-Datei, so dass die Ausgabe eine Umleitung zu einer URL erzeugt mit der Berechnung Token in der URL-codiert; das heißt die URL berechnen:

    http://xyz.abc/captcha ? ...... ">

Wenn der ellided Abschnitt Token enthält. Das sollte im Prinzip arbeiten.

Auf der anderen Seite, ich bezweifle ernsthaft, dass Xslt für so etwas wie dies sehr nützlich ist. Browser kann die Berechnung abbrechen, wenn es lange dauert; sogar in einem Iframe können Sie verhalten, auf Single-Core-Systemen auch nicht blockierende wirksam blockieren, Unterschiede in XSLT-Prozessoren sind so, dass Sie hart gedrückt werden würden, um eine Transformation finden lassen blockiert, dass jeder Motor schnell genug ausgeführt wird, aber keine blaze fast sofort durch.

Ich glaube nicht, Javascript, für diese sehr gut wäre, und XSLT ist wahrscheinlich noch weniger angemessen. Wenn Sie wirklich eine solche Berechnung möchten, Silverlight eine bessere Wette sein kann - zumindest dort können Sie Code schreiben, der überall ziemlich schnell ausgeführt wird, aber dass keine Zukunft Motor jemals trivialisieren konnte (es ist nahe genug, um nativer Geschwindigkeit, die Sie sollten Code schreiben können, dass ziemlich nah an optimal für eine CPU ist -. sicherlich können Sie innerhalb eines Faktors 10, kommen die wahrscheinlich nicht für Javascript / XSLT gesagt werden)

Andere Tipps

Sie werden nicht in der Lage sein, eine XSLT-Transformation nach auszuführen der Seite geladen wird und das Ergebnis in einer Form, in der gleichen Seite ohne Javascript nutzen. Ich weiß nicht, warum Ihre IFrame-Lösung nicht funktioniert, aber selbst wenn es hat, würden Sie noch Javascript müssen das Ergebnis in die Seite des Formulars importieren.

würde Mein Rat ein kleines und schnelles Javascript-basiertes System und Rückfall auf reCAPTCHA zu verwenden, wenn Javascript deaktiviert ist. Sie brauchen nicht da draußen die Proof-of-Arbeit CPU-intensive, jede kundenspezifische Lösung abzuwerfen die sehr große Mehrheit (wenn nicht alle) Spambots zu machen.

Zum Beispiel Ihrer Seite etwas enthalten könnte wie

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

und setzen Sie den Wert von c (a + b) in Javascript. Bot Entscheidungsträger müssten ihre Bots speziell auf Ihre Website, um die extrem einfache CAPTCHA zu lösen anzupassen. Und wenn sie es tun (was sie nicht), dann ein neues Feld hinzufügen, die definiert, welche Art von Betrieb auf a und b auszuführen c zu erhalten. Und wenn sie wieder anzupassen, ändern Sie den Namen der Felder. Aller Wahrscheinlichkeit, werden sie sich nicht anpassen, wenn Ihre Website in Alexa Top 10 sein geschieht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top