2010-11-15 6 views
0

Contexte: J'ai écrit un bookmarklet (JavaScript) qui ajoute un iframe à la page actuelle que vous visualisez. L'attribut src de cet iframe pointe vers un formulaire sur mon application (rails). Je dois passer une clé dans le formulaire (à partir du bookmarklet) en modifiant l'une des valeurs des champs d'entrée ou en passant la valeur en paramètre à la fin de l'url appelant l'action du formulaire.Passing form params via iframe avec javascript sécuritaire?

Je ne vois pas vraiment comment faire le premier, et le dernier semble être une catastrophe de sécurité qui attend de se produire. Je me demandais quelle serait la meilleure pratique ici?

Répondre

2

Ajout d'un paramètre de chaîne de requête à l'URL semble raisonnable, mais vous avez raison - il y a des implications de sécurité. La valeur apparaîtra dans l'historique de navigation de l'utilisateur et sera visible sur HTTP non crypté (mais pas HTTPS).

Il existe une autre méthode basée sur Javascript qui n'est pas encore largement supportée, mais qui mérite d'être considérée - window.postMessage. Il permet aux pages des domaines désignés d'envoyer et de recevoir des messages à l'aide d'un modèle basé sur les événements familier. Voir https://developer.mozilla.org/en/DOM/window.postMessage.

+0

Merci pour votre réponse. Le paramètre string sera-t-il toujours visible si le domaine hébergeant le formulaire est HTTPS? – anxiety

+0

Pas sur le réseau. Je ne suis pas sûr si cela apparaîtrait dans l'historique du navigateur ou non. – harto

+0

D'après ce que je peux tirer de ce système, cela permet essentiellement de déclencher un événement dans l'autre trame, qui peut être utilisé pour envoyer et recevoir des messages. Heres de bonnes nouvelles: Il est entièrement pris en charge dans Internet Explorer 9. La mauvaise nouvelle est que je l'ai essayé dans Firefox 4 Beta 6 et il ne fonctionnait pas du tout> _> –

1

Cela semble assez similaire au framework AJAX que j'ai créé avec iFrames. Le plus simple est de faire en sorte que votre bookmarklet crée une chaîne de requête et la place sur le src de l'iFrame. Si vous avez besoin de changer quoi que ce soit, vous devriez pouvoir définir le paramètre src de l'iFrame sur "# param = value" et faire en sorte que la page de l'iFrame enregistre l'événement onhashchange pour le traiter.
Ainsi, votre code pourrait être:

var iframe = document.createElement('iframe'); 
iframe.src = "http://example.com/mypage?param1=value1&param2=value2"; 
document.body.appendChild(iframe); 

et/ou:

iframe.src = "#param1=value1"; 
// This in the iframe: 
document.onhashchange = function() { 
    // parse location.hash and process form 
} 
+0

Salut merci. C'est l'approche que j'avais l'intention de prendre, mais ma question était vraiment de savoir à quel point il est sûr de passer quelque chose comme une clé avec cette approche - pas nécessairement comment le faire. – anxiety

+0

Si vous utilisez JavaScript, ce ne sera pas sécurisé: p Mais cela ne devrait normalement pas poser de problème, car vous devriez avoir un nettoyage des données sur le serveur qui traite le formulaire. –

0

Un certain nombre de schémas transmettent des secrets dans la partie fragment de l'URL, puis, au début du chargement de la page, le stockent et définissent le fragment comme vierge. Je pense que webkeys le faire.

Sur la page webkeys, voir spécifiquement

Mettre la clé d'autorisation unguessable dans le segment de fragment produit une URL https qui ressemble à: https://www.example.com/app/#mhbqcmmva5ja3.