web-dev-qa-db-fra.com

Javascript peut-il simuler un clic sur un bouton?

Je conçois un site où il serait problématique que les macros s'exécutent librement.

J'ai pensé à un moyen d'arrêter une macro faite en simulant les requêtes HTTP à partir d'un clic sur un bouton, mais ce serait en vain s'ils pouvaient insérer des scripts javascript qui "cliquaient" simplement sur le bouton et procédaient comme un utilisateur normal.

En simulant un clic sur un bouton, je veux dire, le bouton est pressé et le formulaire est en cours d'exécution avec le code php qui lui est associé.

La logique me dit que javascript peut le faire, mais je voudrais savoir avec certitude, merci pour toute entrée!

~ Andrew

27
AndrewB

Un bouton peut toujours être cliqué par programme. Par exemple, vous pouvez avoir une page avec un formulaire comme celui-ci:

<form>
    <input type="text" />
    <button>Do something</button>
    <input type="submit">
</form>

qu'il est possible simplement d'ouvrir la cosole de débogage et de taper

document.getElementsByTagName('button')[0].click();

qui cliquera sur le bouton, ou

document.getElementsByTagName('input')[1].click();

qui cliquera sur le bouton soumettre du formulaire, ou tout simplement

document.forms[0].submit();

pour soumettre le formulaire sans cliquer sur le bouton.

Il n'y a aucun moyen d'empêcher l'utilisateur de maîtriser le code JavaScript sur le client. Vous devez ajouter une validation côté serveur afin d'empêcher les actions utilisateur indésirables.

48
Vadim

la seule chose que vous pouvez faire est de valider la demande sur le serveur.

une fois que vous avez remis la page à un client, vous n'avez aucun contrôle technique sur la façon dont elle pourrait être utilisée.

Ce que vous pouvez faire par exemple, de :

Disons que vous créez un jeu javascript. Vous utilisez AJAX pour envoyer le score du lecteur au serveur pour la journalisation. Après avoir regardé le script, un utilisateur malveillant pourrait exécuter votre AJAX code à envoyer un score de 1 000 000, même s'ils n'ont gagné que 5 000.

Vous ne pouvez pas empêcher cela de se produire du côté javascript. Cependant, il devrait y avoir un moyen d'authentifier les demandes AJAX côté serveur, vous pourriez être en mesure de passer un "jeton" de sécurité en javascript qu'un pirate n'a pas pu obtenir.

2
David Karlsson