2
votes

javascript: Comment empêcher l'utilisateur de saisir = dans la zone de texte?

J'ai une exigence où je dois empêcher les utilisateurs de saisir = dans zone de texte dans toute l'application pour éviter la vulnérabilité.

<input type="text"></input>

J'utilise antisamy-1.4.4.xml et XSSFilter.java qui s'occupe de plusieurs vérifications de vulnérabilité mais ne vérifie pas les '=' signe entré dans la zone de texte . Puis-je faire quoi que ce soit pour une zone de texte qui sera faite pour toute l'application?


0 commentaires

4 Réponses :


0
votes

Sur le frontend , vous pouvez utiliser JavaScript pour éviter que:

<input type="text" id="text">
document.getElementById('text').onkeydown = function(e) {
  const code = e.which || e.keyCode;
  if (code === 187) {
    e.preventDefault();
  }
}

Mais vous devez toujours valider l'entrée côté serveur aussi!


2 commentaires

Mais je dois effectuer l'activité pour l'ensemble de l'application. L'ajout de ce javascript n'aidera que pour une zone de texte particulière.


@sTg Ajoutez ensuite un eventListener à chaque champ de saisie.



0
votes

Tout d'abord, vous devez ajouter une classe de sélecteur comme id ou class, puis il vous suffit d'ajouter ce code js à votre page

$(document).ready(function () {
  $('#textnote').keydown(function (e) {
      if (e.keyCode == 61) {
          e.preventDefault();
          return false;
       }
  });
});


0 commentaires

0
votes

Vous devez écouter l'événement keypress du champ de saisie et empêcher la touche '='.

<script>
document.getElementById("text_input").addEventListener("keypress", function(event){
  if(event.which==187 || event.keyCode==187){
event.preventDefault();
}
});
</script>


0 commentaires

5
votes

Vous pouvez attacher un auditeur aux éléments input dans le document, vérifier si l'utilisateur a appuyé sur la touche = , et si oui, prendre une action.

Quelque chose comme ça devrait fonctionner:

textInput.onpaste = function(e) {
    e.preventDefault();
    clipboardData = e.clipboardData;
  pastedData = clipboardData.getData('Text');
  textInput.value = pastedData.replace("=", "");
}
<input type="text"></input>

Mais je ne me fierais pas à cela comme étant «sécurisé» car un utilisateur peut remplacer le comportement JS dans son navigateur. Vous devez toujours nettoyer l'entrée côté serveur.

Mettre à jour

Pour gérer le cas où un utilisateur colle quelque chose dans le champ input , vous pouvez intercepter la chaîne collée et supprimer les caractères illégaux (signe égal dans ce cas).

Exemple:

const textInput = document.querySelector('input');
textInput.addEventListener("keydown", function(event) {
    if (event.keyCode === 187) {
    	console.log("equals pressed");
        // Prevent default behaviour
        event.preventDefault();
        return false;
    }
});


2 commentaires

Désolé, vous avez dit zone de texte, donc j'ai supposé que vous vouliez dire zone de texte. J'ai mis à jour mon code pour les champs de saisie.


Cela fonctionne assez bien sauf à une condition où nous copions coller = dans la zone de texte. +1 pour la réponse de mon côté.