Question

(NB. B .: Oui, c’est une question ridicule, et je ne serai absolument pas surpris si la réponse à cette question est & "non &"; cela dit:)

J'ai écrit une feuille de style XSLT qui effectue délibérément un calcul long et inégalable sur un fragment XML. Il est conçu comme un composant d'un système de preuve de travail à utiliser dans un navigateur Web comme une sorte de CAPTCHA qui ne nécessite aucune entrée de l'utilisateur - le résultat du calcul est soumis en tant qu'élément de formulaire masqué lorsque l'utilisateur envoie des données au serveur. Le contenu du formulaire n'est accepté que si la valeur calculée est correcte. (Le calcul est structuré de manière à ce que le serveur puisse fournir à l'utilisateur, à moindre coût, les paramètres d'entrée d'une fonction. Le serveur connaît le résultat sans avoir à effectuer beaucoup de travail, mais la machine de l'utilisateur doit passer des cycles pour déterminer le résultat.)

La transformation fonctionne très bien, mais bloque malheureusement le navigateur pendant le calcul. Étant donné que mon objectif est d’avoir ce calcul en cours pendant que l’utilisateur continue à utiliser le navigateur, il s’agit là d’un comportement gênant et inacceptable. Y a-t-il un moyen d'arrière-plan de la transformation et de laisser le navigateur utilisable pendant son exécution? J'avais pensé charger le fragment XML source à partir d'un iframe, mais je n'ai pas réussi à obtenir la transformation. travailler du tout en utilisant cette approche. Je me suis dit que je demanderais ici pour voir si quelqu'un a des idées brillantes avant de me cogner plus loin. Si j'essaie de faire quelque chose qui est fondamentalement impossible compte tenu du mode de fonctionnement des navigateurs, ce serait bien de le savoir.

Je sais que je pourrais le faire en Javascript, mais ce serait bien de ne pas avoir à le faire. Des idées?

MODIFIER: Les gars, je connais recaptcha.net et d’autres alternatives. Ceci est une expérience . Mon objectif est de savoir si une idée théorique peut être réduite à la pratique d’une manière qui ne soit pas trop onéreuse pour l’utilisateur. Je ne cherche pas d'implémentations alternatives, je cherche un moyen de faire un CAPTCHA fort en cryptographie qui ne comporte pas de Javascript. (Si je voulais utiliser Javascript, j'utiliserais l'une des implémentations Javascript.) Le seul autre langage basé sur un navigateur, Turing, est le XSLT. Veuillez considérer la question dans l’esprit dans lequel elle a été posée.

Était-ce utile?

La solution

J'utilise xslt dans une iframe et tout fonctionne correctement. Vous rencontrez probablement un problème indépendant.

Si vous souhaitez que la machine soumette une valeur particulière sans interaction de l'utilisateur ni javascript, envisagez d'utiliser l'utilisation de la méta-actualisation:

  1. Ajoutez un petit iframe caché sur la page Web qui pointe vers une URL récupérant votre fichier xml, qui inclut une directive de traitement de feuille de style dans votre moteur de calcul xslt
  2. Développez le fichier xslt de sorte que la sortie génère une redirection vers une URL avec le jeton de calcul codé dans l'URL; c'est-à-dire calculer l'URL:

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

Où la section ellided contient votre jeton. Cela devrait, en principe, fonctionner.

D'autre part, je doute sérieusement que xslt soit très utile pour quelque chose comme ça. Les navigateurs peuvent abandonner le calcul si cela prend longtemps; même dans une iframe, vous pouvez avoir un comportement bloquant, sur des systèmes à un seul noyau, même un comportement non bloquant peut effectivement le bloquer, les différences dans les moteurs XSLT sont telles qu'il vous serait difficile de trouver une transformation que chaque moteur exécute assez rapidement mais aucun flambez presque instantanément.

Je ne pense pas que javascript serait très utile pour cela, et XSLT est probablement encore moins approprié. Si vous voulez vraiment un tel calcul, silverlight peut constituer un meilleur pari. Au moins, vous pourrez écrire du code qui s’exécute partout assez rapidement, mais qu’aucun futur moteur ne pourrait jamais banaliser (il est suffisamment proche de la vitesse native pour que vous puissiez écrire du code qui est assez proche de l’optimum pour un cpu - vous pouvez certainement entrer dans un facteur 10, ce qui ne peut probablement pas être dit pour javascript / XSLT).

Autres conseils

Vous ne pourrez pas effectuer de transformation XSLT après le chargement de la page et utiliser son résultat dans un formulaire de la même page sans Javascript. Je ne sais pas pourquoi votre solution IFrame ne fonctionne pas, mais même si cela fonctionnait, vous auriez toujours besoin de Javascript pour importer le résultat dans le formulaire de la page.

Mon conseil serait d'utiliser un système basé sur Javascript, petit et rapide, et de recourir à reCAPTCHA si Javascript est désactivé. Vous n'avez pas besoin de faire beaucoup de ressources en matière de preuves de travail, aucune solution personnalisée n’éliminera la très grande majorité (si ce n’est la totalité) des spambots.

Par exemple, votre page peut contenir quelque chose comme

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

et définissez la valeur de c sur (a + b) en Javascript. Les créateurs de bots devront adapter leurs robots spécifiquement à votre site afin de résoudre ce problème extrêmement simple de CAPTCHA. Et s’ils le font (ce qu’ils ne feront pas), ajoutez un nouveau champ qui définira le type d’opération à exécuter sur a et b pour obtenir c. Et s’ils s’adaptent à nouveau, changez le nom des champs. Selon toute probabilité, ils ne s'adapteront pas à moins que votre site ne figure dans le top 10 d'Alexa.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top