2010-01-13 2 views
3

Je travaille actuellement sur un site où j'utilise des ancres pour soumettre des formulaires avec jQuery comme ceci:sécurité-dangers lors de l'utilisation des ancres au lieu de soumettre d'entrée

$("a[title=submit]").click(function(){ 
     $(this).parents("form").submit(); 
     }); 
}); 

Cependant I've read que l'utilisation de liens de cette façon est mauvaise pratique, sécurité-sage.

Est-ce que quelqu'un sait ce que sont les problèmes?

+0

Je pense qu'ils peuvent être source de confusion '' avec GET' a'. "Poster" un formulaire avec un "GET" au lieu d'un "POST" est en effet dangereux. Mais ce n'est pas ce que fait votre code. –

+0

@Craig - ce ne serait sûrement le cas que sur une connexion sécurisée? Comme les données POST sont soumises en texte brut dans les en-têtes HTTP, elles ne sont pas visibles pour l'utilisateur, comme c'est le cas pour les données GET. – Graza

+1

Ce n'est pas seulement la visibilité qui pose problème. 'POST' est conçu pour modifier l'état du serveur; par conséquent, il existe certaines restrictions en place (comme l'avertissement que vous obtenez lorsque vous F5 sur un «POST») pour protéger l'utilisateur de le faire accidentellement. Considérez aussi http://thedailywtf.com/Articles/The_Spider_of_Doom.aspx –

Répondre

4

C'est une mauvaise pratique, mais les "dangers" n'ont rien à voir avec la sécurité. L'utilisation d'un lien assisté par script pour soumettre un formulaire au lieu d'avoir simplement un bouton de soumission rend inutilement votre formulaire nécessitant JavaScript (donc cela ne fonctionnera pas si JS est indisponible ou cassé en raison d'autres erreurs), et rend le lien donner des affordances comme "ouvrir dans une nouvelle fenêtre" et "lien de signet" qui ne sont pas appropriées et ne fonctionnera pas pour une soumission de formulaire.

Utilisez un bouton normal input type="submit". Si vous voulez vraiment à ressembler à un lien pour une raison quelconque, le style comme un, par exemple:

input.linklike { 
    color: blue; text-decoration: underline; 
    border: none; padding: 0; 
    width: auto; overflow: visible; /* hack for IE */ 
} 
4

Ceci n'est pas un problème de sécurité car tout le monde peut manipuler le code html/js/css sur sa machine locale en utilisant Firebug ou d'autres outils. S'il vous plaît garder à l'esprit que vos formulaires doivent toujours être validés par le serveur (backend).

+0

Je ne dirais pas qu'il n'y a pas de problème de sécurité, mais je suis d'accord, il n'est pas moins sûr qu'avec le formulaire traditionnel soumettre. –

1

Il n'y a pas de problème de sécurité mais cela peut ne pas fonctionner pour tous les utilisateurs. Javascript pourrait être désactivé (auquel cas vous ne pourriez pas soumettre du tout), ou des plugins de sécurité pourraient bloquer le script s'il détecte par erreur un script javascript post-by-javascript.

Vous devez vous assurer que la page est toujours utilisable si javascript est désactivé. Peut-être rendre un bouton de soumission dans le code HTML, puis utiliser jQuery pour supprimer le bouton et insérer une ancre. De cette façon, si javascript fonctionne, vous obtiendrez votre soumission d'ancre, mais si ce n'est pas le cas, vous aurez toujours votre bouton d'envoi.

+0

Bon, ce n'est pas un problème de sécurité mais un problème d'accessibilité. Les formulaires doivent avoir un bouton de soumission, pas seulement un lien de soumission. –

Questions connexes