IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Problème d'encodage de texte


Sujet :

Développement Web en Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut Problème d'encodage de texte
    Bonjour,

    Dans mon application, j'ai mis en place un filtre permettant d'échapper les caractères html spéciaux afin d'éviter l'execution de scripts malveillants.
    Ce filtre réécrit la methode getParameterValue afin d'échapper ces caractères.

    Le problème est que depuis que le filtre est en place, le navigateur affiche le code iso des caractères échappés au lieux des caractères eux meme comme si les caractères échappés n'avaient pas été interprétés par le navigateur.

    Comment puis-je faire pour appliquer le filtre et que ce soit transparent pour l'utilisateur (affichage normal des chaines de caractères)?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Peux-tu montrer le code de ton filtre ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut
    Le code du filtre est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class CrossScriptingFilter implements Filter {  
     
    public void init(FilterConfig filterConfig) throws ServletException {}  
     
    public void destroy() {}      
     
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
    {   
    	chain.doFilter(new RequestWrapper((HttpServletRequest) request), response);
    	}
    }
    et celui de RequestWrapper :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     
    public final class RequestWrapper extends HttpServletRequestWrapper {     
     
    	public RequestWrapper(HttpServletRequest servletRequest) {
    		super(servletRequest);     
    		}     
    	public String[] getParameterValues(String parameter) {       
    		String[] values = super.getParameterValues(parameter);       
    		if (values==null)  {                   
    			return null;           
    		}       
    		int count = values.length;       
    		String[] encodedValues = new String[count];       
    		for (int i = 0; i < count; i++) { 
    			encodedValues[i] = cleanXSS(values[i]);
    		}       
    		return encodedValues;     
    		}     
     
    	public String getParameter(String parameter) { 
    		String value = super.getParameter(parameter);   
    		if (value == null) {                  
    			return null;                   
    			}           
    		return cleanXSS(value);     
    		}     
     
    	public String getHeader(String name) {         
    		String value = super.getHeader(name);         
    		if (value == null)             
    			return null;         
    		return cleanXSS(value);     
    		}     
     
    	private String cleanXSS(String value) { 
    		//You'll need to remove the spaces from the html entities below         
    		value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;");         
    		value = value.replaceAll("\\(", "(").replaceAll("\\)", ")");         
    		value = value.replaceAll("'", "'");         
    		value = value.replaceAll("eval\\((.*)\\)", "");         
    		value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");         
    		value = value.replaceAll("script", "");
    		return value;     
    	}  
    }

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu utilises ces valeurs comment côté serveur ? j'arrive pas trop à voir l'intérêt sur le request... j'aurais mieux compris sur la réponse par ce que finalement, le code n'est interprétable que dans le navigateur, j'ai raté quelque chose ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut
    Oui effectivement, c'est au niveau de l'affichage des valeur dans les champs que je veux échapper les caractères spéciaux.
    Il y a l'option escapexml pour les balises <c:out mais pour les autres balises je ne sais pas bien comment faire et j'aurais aimé le faire de manière automatique

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu en as besoin pour quelles autres balises ?
    Les champs d'input n'ont pas besoin d'être échappés, le code n'est pas interprété dans l'attribut "value".

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut
    en fait du coup j'ai posté dans la catégorie "struts" car je fais un document.getElementsByTagName('*').escapeHTML(); mais ca ne fonctionne qu'avec les balises html mais pas avec les balises struts

Discussions similaires

  1. [XL-2003] Problème d'encodage du texte importé du net via excel
    Par aimé18 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/09/2012, 14h09
  2. widget Text: problème d'encodage.
    Par Luke spywoker dans le forum Tkinter
    Réponses: 5
    Dernier message: 30/11/2010, 10h56
  3. Réponses: 24
    Dernier message: 06/02/2008, 13h59
  4. Problème d'encodage de texte
    Par Grantoumaigr dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/09/2007, 15h13
  5. problème de passage de texte avec getvariable
    Par VincentB dans le forum Flash
    Réponses: 2
    Dernier message: 12/01/2004, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo