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é.