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?
4 Réponses :
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!
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.
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; } }); });
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>
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; } });
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é.