8 min de lecture

Des raccourcis clavier d'approbation qui résistent aux déclenchements accidentels

Les raccourcis clavier d'approbation doivent être testés contre les changements de focus, le timing, les répétitions et les entrées du terminal avant d'autoriser une action d'agent.

Des raccourcis clavier d'approbation qui résistent aux déclenchements accidentels

Un contrôle d'approbation au clavier fait partie de la frontière d'autorisation. Ce n'est pas une fonction pratique à laquelle on aurait simplement ajouté une étiquette de sécurité. Si une touche habituelle du terminal peut traverser un changement de focus, une boîte de dialogue modale qui vient de s'ouvrir ou une file d'entrées répétées pour autoriser un appel d'agent, le contrôle n'a pas recueilli une décision. Il a recueilli un timing.

Cette erreur est facile à livrer parce que le parcours nominal semble excellent. Un développeur lance une action, une fenêtre d'approbation apparaît, la touche Entrée l'accepte et tout le monde trouve l'interaction rapide. Puis le même développeur lit la sortie du terminal, maintient une touche de modification en changeant de fenêtre ou appuie sur Entrée pour fermer une invite sans rapport. L'approbation arrive au mauvais moment et l'action obtient un consentement que personne n'a donné consciemment.

Un raccourci d'approbation est une frontière de sécurité

Un raccourci d'approbation doit représenter une nouvelle décision attribuable concernant une action en cours précise. Le fait que l'utilisateur possède le clavier, ou que le processus demandeur soit autorisé à faire une demande, ne transforme pas chaque caractère en approbation.

Les équipes confondent régulièrement trois faits distincts :

  • Un processus peut demander une action.
  • Une personne peut être présente devant la machine.
  • Cette personne peut approuver cette action précise maintenant.

Le premier fait concerne l'identité du processus. Le deuxième concerne la présence locale. Le troisième est l'autorisation. Un processus signé peut bien établir le premier fait. Une fenêtre visible peut suggérer le deuxième. Aucun des deux ne prouve le troisième.

Traitez l'interface d'approbation comme une petite machine à états, avec une entrée étroite vers l'état approuvé. Elle doit savoir quelle demande elle affiche, si elle possède actuellement les entrées, quand elle est devenue éligible à l'activation au clavier et si la demande reste valide. Dès que l'un de ces éléments change, invalidez l'ancien chemin d'approbation.

Une erreur d'implémentation fréquente consiste à placer le raccourci dans un gestionnaire de commandes global et à vérifier seulement si une fenêtre d'approbation existe. Cela paraît inoffensif dans une démonstration. En pratique, un événement arrivé en retard peut approuver une autre demande, une ancienne demande après son remplacement ou une fenêtre qui revient tout juste de l'arrière-plan. Le bouton n'avait pas besoin d'être visible au moment exact où la personne a appuyé sur la touche.

La solution n'est pas de supprimer tous les raccourcis. Une confirmation à la souris בלבד est pénible pour les personnes qui maîtrisent le clavier et les pousse à cliquer rapidement. Il faut plutôt rendre l'activation au clavier plus difficile à valider qu'un simple libellé de bouton. Le système ne doit l'accepter que lorsque la boîte de dialogue actuelle, la demande actuelle, la génération actuelle du focus et la pression physique actuelle concordent.

Cette distinction change la revue de code. Demandez « quel événement précis peut franchir cette frontière ? » plutôt que « Entrée clique-t-elle sur le bouton ? ». Une bonne réponse nomme la source de l'événement, l'état de la fenêtre, l'identifiant de la demande et les cas de rejet. « La boîte de dialogue est ouverte » n'est pas une réponse.

Le focus doit être prouvé, pas présumé

Une boîte de dialogue doit perdre toute éligibilité au clavier dès qu'elle perd le focus, même si elle le récupère un instant plus tard. Les transitions de focus sont le point où une entrée destinée à une surface de l'application est interprétée par une autre.

Prenons une séquence courante. Un agent exécute une commande dans un terminal. L'utilisateur saisit une commande, passe à la documentation, puis une fenêtre modale d'autorisation apparaît. Le système d'exploitation change de fenêtre active alors que les mains de l'utilisateur sont encore en mouvement. Selon l'ordre des événements et le framework de l'application, une pression sur Entrée peut arriver après que la fenêtre modale a pris le focus, même si l'intention de l'utilisateur s'est formée avant qu'il ne la voie.

La règle dangereuse est simple : si le bouton d'autorisation est le bouton par défaut et que la fenêtre est au premier plan, accepter Entrée. Cette règle traite la position au premier plan comme la preuve que la personne a vu et évalué la demande. Elle prouve seulement que la fenêtre occupait le sommet de la pile au moment de la distribution de l'événement.

Utilisez plutôt une génération de focus. Lorsque la boîte de dialogue devient active, incrémentez un compteur et désarmez l'activation au clavier. Commencez à accepter une pression valide seulement après que l'application a observé la stabilisation du focus pour la génération actuelle et après avoir détecté une nouvelle pression de l'utilisateur. Lors de la désactivation, effacez immédiatement l'état armé. Ne le rétablissez pas automatiquement au retour du focus.

Cette approche est volontairement prudente. Un utilisateur qui quitte la fenêtre puis y revient doit appuyer une fois sur le raccourci après son retour. Cette pression supplémentaire coûte peu. Envoyer accidentellement un appel HTTP avec des identifiants ou une commande SSH coûte bien plus cher.

La même règle s'applique lorsque le système affiche une autre feuille modale, une invite de mot de passe, une superposition d'accessibilité, une interaction de notification ou un changement d'espace de travail. Votre application ne peut pas savoir pourquoi le focus a changé et ne doit pas le deviner. Elle peut savoir que ses hypothèses précédentes ne tiennent plus.

Ne vous fiez pas uniquement aux anneaux visuels de focus. Ils indiquent à l'utilisateur où l'entrée semble être dirigée, mais une décision d'approbation a besoin d'une transition d'état qui vérifie la fenêtre active réelle de l'application et la génération actuelle de la boîte de dialogue. L'état visuel et l'état d'autorisation doivent évoluer ensemble depuis une même source de vérité.

Un test manuel utile consiste à ouvrir une boîte de dialogue d'approbation, maintenir une touche de modification, changer de fenêtre, revenir et appuyer immédiatement sur Entrée. Répétez le test avec un clic à l'extérieur de la boîte de dialogue, une alerte système et un changement rapide d'application. À chaque tentative, la demande doit rester en attente jusqu'à une nouvelle action explicite. Si une seule variante approuve l'action, le chemin clavier est trop large.

Les touches maintenues nécessitent une machine à états distincte

Une touche déjà enfoncée avant que la boîte de dialogue devienne éligible ne peut pas l'autoriser. Cette règle couvre les bugs qui apparaissent lorsqu'une personne maintient Entrée, Espace, Échap ou une touche de modification pendant que l'interface change sous ses yeux.

Les API d'événements fournissent souvent les phases d'appui, de répétition et de relâchement, mais le code de l'application les réduit généralement à « Entrée reçue ». Cette réduction supprime l'information importante. Une pression commencée dans un terminal n'a pas le même sens qu'une pression qui commence après l'affichage et la prise de focus de la demande d'approbation.

Suivez le cycle physique de chaque raccourci accepté. La boîte de dialogue ne peut accepter un raccourci que lorsqu'elle observe un événement d'appui sans répétition après sa propre époque d'activation, alors qu'elle a le focus, suivi par la règle de complétion utilisée par votre plateforme. Si la touche est déjà enfoncée à l'ouverture de la boîte de dialogue, placez un bloqueur pour cette touche et attendez son relâchement. Ne déduisez pas une nouvelle pression d'une répétition.

Espace mérite la même attention qu'Entrée. De nombreux contrôles utilisent Espace pour l'activation au clavier et les utilisateurs maintiennent cette touche pour les aperçus, le défilement ou des actions d'accessibilité. Échap demande aussi un examen attentif. Cette touche doit annuler uniquement la demande affichée en cours et ne doit pas annuler une demande de remplacement apparue après sa pression.

Les combinaisons avec des touches de modification nécessitent une politique plus stricte. Évitez de traiter l'état d'une touche de modification seule comme une permission et évitez les raccourcis qui se confondent avec les habitudes du terminal, comme Contrôle-C, Contrôle-D ou Contrôle-R. Si vous choisissez une combinaison, exigez que l'ensemble commence après l'armement de la boîte de dialogue et rejetez-la si le focus a changé alors qu'un de ses éléments était enfoncé. Une combinaison commencée dans une autre fenêtre ne constitue pas une décision concernant votre boîte de dialogue.

Un petit enregistrement interne suffit :

requestId: 84f2
focusGeneration: 17
armedAfterEvent: 912
returnIsBlockedUntilUp: true
approvalState: pending

Les noms importent peu. La règle compte : un événement doit être plus récent que la génération actuelle du focus de la boîte de dialogue et appartenir à un cycle d'entrée nouveau. Les équipes ajoutent souvent cet état après le signalement d'une approbation accidentelle. Ajoutez-le avant le raccourci.

Le timing modal transforme une entrée normale en autorisation

Une boîte de dialogue modale qui apparaît au mauvais moment peut recevoir une entrée destinée à la tâche sous-jacente. Le danger vient du timing des événements, pas du degré de finition du message de confirmation.

Plusieurs fenêtres temporelles méritent d'être nommées. Une demande peut arriver entre l'appui et le relâchement d'une touche. L'interface peut s'afficher avant que l'état de l'application ait fini d'associer l'identifiant de la demande. Une demande précédente peut se fermer alors qu'un callback en attente conserve encore son gestionnaire de complétion. Une nouvelle boîte de dialogue peut réutiliser le même objet bouton et laisser une ancienne action clavier pointer vers un nouveau contenu.

L'échec classique ressemble à ceci :

  1. L'utilisateur appuie sur Entrée dans un terminal pour envoyer une commande.
  2. Le processus de l'agent demande une autorisation pendant que la pression est en cours.
  3. L'application affiche une boîte de dialogue d'approbation et active son bouton par défaut.
  4. Le relâchement de la touche ou un événement répété atteint le nouveau récepteur.
  5. L'application traite cet événement comme une approbation et envoie l'action.

L'utilisateur n'a peut-être jamais lu la boîte de dialogue. L'application inscrit pourtant dans l'audit que l'utilisateur a approuvé l'action, ce qui aggrave l'échec. La trace décrit correctement le chemin de code et faussement l'acte humain.

Empêchez cela avec une barrière d'activation. Lors de l'affichage, enregistrez une séquence d'entrée monotone ou un horodatage provenant du sous-système d'événements et refusez les événements qui ont commencé avant cette barrière. Si la plateforme ne fournit pas de séquence fiable, exigez une pression complète et nouvelle après l'activation visible de la boîte de dialogue. Choisissez la conception prudente lorsque la plateforme laisse planer un doute.

Utilisez des générations de demandes en plus des générations d'entrée. Liez chaque action de bouton et chaque gestionnaire clavier à un jeton de demande immuable. À la fermeture de la boîte de dialogue, révoquez ce jeton. Lorsqu'une autre demande le remplace, créez un nouveau jeton au lieu de modifier l'ancien objet. Un callback qui transporte un ancien jeton doit retourner un refus, même si une nouvelle boîte de dialogue est visible.

N'essayez pas de résoudre le timing avec un simple délai comme « ignorer Entrée pendant 300 millisecondes ». Les délais sont populaires parce qu'ils sont faciles à expliquer et à programmer. Ils échouent sur les machines lentes, lors de changements rapides de focus, avec les entrées d'accessibilité et pour les personnes qui prennent légitimement plus de temps. Un délai mesure une durée. Vous devez mesurer la relation entre l'événement d'entrée et l'état actuel de la boîte de dialogue.

La mémoire musculaire du terminal est une entrée hostile

Rendez chaque appel sensible intentionnel
Les clés par appel peuvent exiger une approbation par clic ou Touch ID pour chaque action utilisant un identifiant.

Le travail dans un terminal produit exactement les touches dont une boîte de dialogue d'approbation doit se méfier. Les développeurs appuient sur Entrée pour envoyer des commandes, sur Contrôle-C pour arrêter un travail, sur Espace pour parcourir la sortie et sur Échap pour abandonner une modification. Les agents rendent l'activité du terminal plus fréquente, si bien que la fenêtre d'autorisation apparaît à côté d'un flux de touches habituelles.

Ne supposez pas qu'un terminal se trouve derrière une frontière distincte entre applications. Les utilisateurs travaillent avec des terminaux intégrés, des volets divisés, des shells distants, des fenêtres en plein écran et des panneaux d'outils qui ressemblent à des terminaux. Un processus peut aussi déclencher une demande d'autorisation juste après qu'une sortie a demandé au développeur d'appuyer sur une touche. Le contexte visuel peut changer plus vite que le geste prévu par l'utilisateur.

Le comportement sûr par défaut consiste à faire en sorte qu'une boîte de dialogue d'approbation ne consomme aucune entrée héritée. Elle peut recevoir une nouvelle pression sur Entrée après la prise de focus et l'armement, mais elle doit rejeter l'Entrée qui a envoyé une commande shell, l'Espace maintenu pour faire défiler la sortie et toute répétition générée par l'une ou l'autre touche. Si l'interface ne peut pas établir cette distinction, supprimez le raccourci et exigez une confirmation par pointeur ou par biométrie.

Ne liez pas une approbation dangereuse à des commandes ressemblant à celles du terminal dans une table de commandes globale. Un écouteur global voit les événements qui dépassent la chaîne de récepteurs locale de la boîte modale, ce qui rend difficile de prouver où l'activation a commencé. Gardez le gestionnaire attaché à la boîte de dialogue active précise, puis exigez qu'elle vérifie son propre jeton de demande avant de demander à la couche d'autorisation d'agir.

C'est aussi à ce moment qu'il faut examiner le copier-coller. Un saut de ligne collé peut être un texte ordinaire dans un terminal et une activation dans un contrôle de formulaire. Les contrôles d'approbation doivent ignorer l'insertion de texte et la distribution de commandes qui ne proviennent pas d'un événement physique de raccourci répondant aux critères. Un caractère collé est une donnée, pas un consentement.

Testez avec un véritable flux de travail dans un terminal, pas seulement avec une fenêtre synthétique. Lancez une commande qui affiche plusieurs invites, déclenchez une demande pendant que vous appuyez sur Entrée et testez après avoir utilisé Contrôle-C et Espace. Faites les essais lorsque le terminal a le focus, lorsqu'une fenêtre de documentation l'a et lorsque la fenêtre d'autorisation apparaît pendant un changement de fenêtre. Le but est de reproduire une intention née ailleurs.

Testez l'historique des événements, pas le bouton affiché

Les tests les plus utiles transmettent à un réducteur un historique d'événements hostiles et vérifient qu'il ne peut pas produire une approbation avant la séquence exacte. Les tests instantanés peuvent confirmer qu'une boîte de dialogue semble focalisée. Ils ne peuvent pas révéler si un événement périmé a franchi la frontière.

Modélisez la boîte de dialogue avec des événements explicites tels que present, focusGained, focusLost, keyDown, keyRepeat, keyUp, requestRevoked et approveClick. Donnez à chaque événement un jeton de demande et une séquence d'entrée qui augmente toujours. Le réducteur doit produire l'un de trois résultats : rester en attente, annuler ou émettre une approbation pour un jeton correspondant.

Ce dispositif de test est volontairement assez petit pour rester à côté du code d'interaction :

[
  {"seq": 41, "type": "keyDown", "key": "Return"},
  {"seq": 42, "type": "present", "request": "r-19"},
  {"seq": 43, "type": "focusGained", "request": "r-19"},
  {"seq": 44, "type": "keyUp", "key": "Return"},
  {"seq": 45, "type": "keyDown", "key": "Return"},
  {"seq": 46, "type": "keyUp", "key": "Return"}
]

La forme de sortie attendue est tout aussi importante :

[
  {"seq": 44, "decision": "pending", "reason": "inherited-input"},
  {"seq": 46, "decision": "approved", "request": "r-19"}
]

Si votre implémentation approuve à la séquence 44, elle a accepté une pression commencée avant l'existence de la boîte de dialogue. Voilà le bug, exprimé sans capture d'écran ni condition de course qui n'apparaît qu'une fois par semaine.

Construisez une matrice de tests compacte autour des changements d'état plutôt qu'autour des libellés. Couvrez au moins les cas suivants :

  • Un raccourci est enfoncé avant l'affichage et relâché après l'arrivée du focus.
  • Le focus quitte la boîte de dialogue après le début d'une nouvelle pression et revient avant le relâchement.
  • Un événement répété arrive alors qu'une demande reste en attente.
  • La demande A se ferme, la demande B s'ouvre et un ancien gestionnaire s'exécute.
  • Le coffre ou une autre condition préalable change d'état après l'apparition de la boîte de dialogue.

Pour chaque cas, vérifiez à la fois qu'aucune action n'est envoyée et que la piste d'audit enregistre un refus ou l'absence de décision, selon votre conception. Un événement ignoré silencieusement peut être acceptable. Une trace qui affirme une approbation alors que le réducteur l'a refusée ne l'est pas.

Testez ensuite l'intégration de l'interface, qui contourne parfois des réducteurs pourtant solides. Vérifiez que chaque chemin d'activation passe par la même porte : clic, Entrée, Espace, action d'accessibilité, action programmatique du bouton par défaut et éventuelle commande de menu. Un chemin de raccourci distinct qui appelle directement l'action finira par diverger du chemin du bouton.

Utilisez l'injection de dépendances pour l'exécuteur d'action dans ces tests. Le test ne doit recevoir un objet d'appel qu'après que le réducteur a émis une approbation pour le jeton actuel. Comptez les appels, capturez le jeton de demande et échouez si un ancien jeton atteint l'exécuteur. Ne testez pas cela en envoyant une véritable requête HTTP ou commande SSH. La frontière d'autorisation doit pouvoir être testée sans identifiant ni réseau.

Les tests manuels restent importants, car les systèmes d'exploitation distribuent les événements de focus et d'accessibilité par des chemins que les simulations peuvent manquer. Rédigez un court script de régression en langage courant, exécutez-le sur le plus ancien système pris en charge et sur un système récent, avec un clavier physique. Incluez les changements rapides de fenêtre, les touches maintenues, les touches répétées, les alertes système, le verrouillage de l'écran, la sortie de veille et une demande révoquée alors qu'elle est visible. Le script doit préciser la décision attendue après chaque action, pas seulement indiquer que la boîte de dialogue s'est comportée correctement.

Un événement refusé doit rester refusé

Injectez les identifiants API à l'exécution
Sallyport injecte les identifiants bearer, basic ou d'en-tête personnalisé uniquement au moment d'exécuter l'appel HTTP.

Une fois qu'un événement ne respecte pas le prédicat d'approbation, les changements ultérieurs de l'interface ne doivent pas le réhabiliter. Cela paraît évident jusqu'à ce qu'une implémentation conserve un indicateur générique « approbation en attente » et le vérifie de nouveau après le retour du focus ou la fin d'une animation.

Rendez le rejet définitif pour cet événement. Si Entrée arrive alors que la boîte de dialogue est désarmée, enregistrez-la comme entrée héritée ou ignorez-la, puis attendez une nouvelle pression. Si le focus change pendant une combinaison, invalidez cette combinaison. Si la demande change, invalidez chaque événement et callback associé à la demande précédente. Le code ne doit pas conserver une approbation potentielle au cas où les conditions s'amélioreraient.

Ce principe protège aussi contre les actions en double. Un double clic, une action au clavier suivie d'une action au pointeur ou la relecture d'un événement ne doit pas provoquer deux appels externes. Lorsque la couche d'autorisation accepte un jeton d'approbation, marquez la demande comme consommée avant de distribuer l'action. Les activations suivantes pour ce jeton doivent produire un rejet inoffensif des doublons.

Séparez le résultat de l'interface de celui de l'action externe. L'interface peut indiquer « approuvée pour distribution » seulement après avoir fermé l'état de décision. L'exécuteur peut alors réussir ou échouer indépendamment. Si une requête réseau échoue, ne réactivez pas l'ancien jeton d'approbation et ne réessayez pas discrètement lors d'une touche ultérieure. Redemandez l'autorisation si l'utilisateur doit autoriser une nouvelle tentative, surtout lorsque la charge utile ou la destination de l'action a pu changer.

C'est ici que la conception de l'audit montre son intérêt. Consignez suffisamment de contexte pour reconstituer qu'une entrée a été rejetée parce qu'elle était périmée, répétée, sans focus, révoquée ou déjà consommée. Évitez de transformer le journal en enregistrement de chaque touche. Vous avez besoin de preuves de décision, pas d'un dossier de surveillance.

Identité, autorisation et portée exigent des réponses distinctes

Conservez une trace de chaque appel
Les journaux d'activité et de session conservent chaque appel et chaque exécution d'agent dans un audit chiffré unique.

Un flux d'approbation fiable répond à trois questions : qui a fait la demande, que veut-il faire et la personne approuve-t-elle cette action précise ? Une réponse ne doit pas remplacer une autre.

L'identité du processus est utile, car elle permet à la personne de décider si le demandeur est attendu. Sur macOS, l'autorité de signature du code peut fournir un signal plus pertinent qu'un nom de processus modifiable. Mais un processus attendu peut tout de même effectuer une demande inattendue, et une personne peut approuver la mauvaise demande à cause d'un raccourci déclenché par erreur.

La portée est encore distincte. Une permission de session peut convenir à un travail peu risqué qu'une personne a inspecté, mais elle ne transforme pas tous les appels futurs en une même décision. La confirmation par action a un autre objectif : imposer un nouveau jugement au moment où une action utilise un identifiant ou atteint une destination sensible. Concevez l'interaction de façon que l'utilisateur voie quelle couche il est en train de modifier.

Évitez les libellés vagues comme « Autoriser » lorsque la demande entraîne un effet externe. Indiquez la méthode, la destination et l'opération importante dans un langage que l'opérateur peut vérifier. Ne transformez pas non plus la boîte de dialogue en paquet de détails indigeste. Affichez d'abord les faits utiles à la décision et rendez les détails exacts disponibles sans faire dépendre l'approbation d'un exercice de défilement.

Sallyport garde volontairement ces couches étroites : un coffre verrouillé refuse toute action, un nouveau processus d'agent demande par défaut une autorisation de session et certains identifiants peuvent exiger une nouvelle approbation à chaque utilisation. Cette conception ne sécurise pas à elle seule l'interaction au clavier ; le raccourci doit encore prouver que la personne actuelle a approuvé l'appel actuel.

Ne livrez qu'une fois la trace d'échec devenue banale

Ne livrez le raccourci que lorsque les entrées hostiles produisent des refus ordinaires et explicables. Une personne doit pouvoir maintenir Entrée pendant l'affichage, changer de fenêtre au milieu d'une combinaison, déclencher une répétition d'Espace ou faire arriver une demande de remplacement au même moment sans provoquer d'appel externe.

Placez le dispositif de test dans la même revue que la modification de l'interface. Demandez à un réviseur de lire la séquence d'événements qui prouve qu'une touche périmée ne peut pas franchir la frontière. Exigez que l'implémentation expose une seule fonction d'autorisation qui vérifie l'identité de la demande, la génération du focus, la fraîcheur de l'entrée et l'état de consommation. Les gestionnaires pratiques doivent appeler cette fonction sans jamais la contourner.

Surveillez les journaux de production à la recherche de tendances qui signalent des frictions, sans affaiblir le prédicat. De nombreux refus liés à des entrées héritées après l'apparition d'une boîte modale peuvent indiquer que la demande arrive à un moment mal choisi. Améliorez le moment et la présentation de la demande, ou proposez un parcours par pointeur et biométrie. Ne « corrigez » pas la mesure en acceptant les événements que le système a correctement rejetés.

Un bon raccourci d'approbation semble banal après que la personne a consulté la demande. C'est la seule rapidité qui mérite d'être optimisée. Tout autre chemin rapide ne fait que transformer la mémoire musculaire du terminal en autorisation.

FAQ

Les raccourcis clavier sont-ils sûrs pour approuver les actions d'un agent ?

Un raccourci peut réduire les frictions, mais il ne doit jamais autoriser une action simplement parce qu'une touche familière a été détectée. Exigez une fenêtre d'approbation active, actuelle et liée à une seule demande précise avant d'accepter l'entrée.

Que doit-il se passer si une boîte de dialogue d'approbation perd le focus ?

Le choix le plus sûr est de la rejeter. Si le focus est parti puis revenu, la boîte de dialogue doit exiger une nouvelle action délibérée au lieu de supposer que l'ancien raccourci reste valable.

Une touche Entrée maintenue peut-elle approuver une boîte de dialogue modale ?

Une touche maintenue avant l'ouverture de la boîte de dialogue ne doit rien approuver. N'acceptez une activation au clavier qu'après l'observation d'une nouvelle pression et d'un relâchement alors que la boîte de dialogue actuelle a le focus.

La répétition d'une touche doit-elle activer un bouton d'approbation ?

Non. La répétition d'une touche indique que l'utilisateur la maintient enfoncée, pas qu'il prend une nouvelle décision d'autorisation. Traitez les répétitions comme inactives pour les contrôles d'approbation.

Quelle entrée doit compter comme une approbation délibérée ?

Utilisez un clic, Touch ID ou une nouvelle pression qui commence après l'activation de l'écran d'approbation actuel. L'événement doit aussi correspondre à la demande toujours affichée.

Pourquoi la touche Entrée est-elle dangereuse avec les agents qui utilisent un terminal ?

Parce que les terminaux habituent les utilisateurs à appuyer rapidement et souvent sur Entrée. Si une invite apparaît pendant qu'un agent affiche une sortie ou attend une commande, cette habitude peut transformer une touche sans rapport en consentement.

Que doit contenir un journal d'audit des approbations ?

Consignez l'identifiant de la demande, la génération de la boîte de dialogue, l'état du focus, la source de l'entrée et la décision. Ne consignez pas la touche elle-même si cela ajoute des données sensibles inutiles à la piste d'audit.

Comment tester les conditions de course dans les boîtes de dialogue d'approbation ?

Commencez par un petit modèle déterministe de la boîte de dialogue et soumettez-lui des séquences d'événements hostiles : perte de focus, réouverture, touches maintenues, répétitions, événements en attente et anciens callbacks. Les tests de capture d'écran seuls ne peuvent pas détecter cette catégorie d'erreurs.

La signature du code rend-elle l'approbation par raccourci sûre ?

Non. L'identité de signature indique qui a lancé le processus demandeur. Elle ne prouve pas que la personne au clavier voulait approuver cette action précise. Gardez ces décisions séparées.

Un raccourci d'approbation doit-il fonctionner lorsque le coffre d'identifiants est verrouillé ?

Un coffre verrouillé doit refuser l'action avant même qu'un raccourci d'approbation puisse avoir un effet. L'interaction d'approbation doit ajouter le consentement humain à une action déjà autorisée, sans contourner le verrou du coffre.

Sallyport

Sallyport exécute les appels d'API et les commandes SSH à la place de votre agent IA. Les clés restent dans un coffre-fort local sur votre Mac ; vous approuvez chaque exécution et chaque action est consignée dans un journal scellé.

© 2026 Sallyport · Open source sous Apache-2.0 · Oleg Sotnikov