Comment fixer le HTTP Response splitting de la vulnérabilité ESAPI
après une récente findbugs (FB) de l'exécuter se plaint d'un: à la Sécurité "HTTP Response splitting" vulnérabilité Le code suivant déclenche:
String referrer = req.getParameter("referrer");
if (referrer != null) {
launchURL += "&referrer="+(referrer);
}
resp.sendRedirect(launchURL);
Fondamentalement, le "référent" http paramètre contient une url, à qui, quand on clique sur un bouton de retour dans notre application, le navigateur renvoie. Il est ajouté à l'url en paramètre. Après un peu de recherche, je sais que j'ai besoin de désinfecter l'url de provenance. Après un peu plus de recherche, j'ai trouvé le esapi projet qui semblent offrir ce type de fonctionnalité:
//1st canonicalize
import org.owasp.esapi.Encoder;
import org.owasp.esapi.Validator;
import org.owasp.esapi.reference.DefaultEncoder;
import org.owasp.esapi.reference.DefaultValidator;
[...]
Encoder encoder = new DefaultEncoder(new ArrayList<String>());
String cReferrer = encoder.canonicalize(referrer);
Cependant, je n'ai pas trouver comment détecter par exemple, le code jscript ou d'autres choses qui n'appartient pas à une url de référence. Alors, comment puis-je atteindre avec esapi?
J'ai essayé:
Validator validator = new DefaultValidator(encoder);
validator.isValidInput("Redirect URL",referrer,"HTTPParameterValue",512,false);
cependant cela ne fonctionne pas. Ce dont j'ai besoin est une fonction qui se traduit par:
http://www.google.com/login?dest=http://google.com/%0D%0ALocation: javascript:%0D%0A%0D%0Aalert(document.cookie) (pas ok)
Ou est-ce assez pour appeler la déclaration suivante?
encoder.encodeForHTMLAttribute(referrer);
Toute aide appréciée.
OriginalL'auteur Lonzak | 2013-05-08
Vous devez vous connecter pour publier un commentaire.
Voici ma dernière solution, si quelqu'un est intéressé. J'ai d'abord accepter et ensuite l'URL de décoder la chaîne. Si un CR ou LF existe (\n \r) je viens de couper du reste de la potentiels "attaque" de la chaîne en commençant par \n ou \r.
Théoriquement je pourrais avoir plus tard vérifié la valeur par rapport 'HTTPParameterValue' regex qui est définie dans l'ESAPI.propriétés toutefois, il n'aimait pas les deux points dans la http://et je n'ai pas investigué plus loin.
Et encore une remarque après un essai: la Plupart des navigateur moderne de nos jours (Firefox > 3.6, Chrome, IE10, etc.) détecter ce genre de problème et n'exécute pas le code...
encodeForURL(decodeFromURL(url))
peut potentiellement endommager votre Url.OriginalL'auteur Lonzak
Je pense que vous avez la bonne idée, mais l'utilisation inappropriée d'un codeur. Le Referer [sic] valeur d'en-tête est vraiment une adresse, et non pas un attribut HTML, si vous voulez vraiment utiliser:
encoder.encodeForURL(referrer);
-kevin
OriginalL'auteur Kevin W. Wall
Je dirais approche par liste blanche où vous vérifiez la
referrer
chaîne uniquement pour les caractères autorisés. Regex serait une bonne option.EDIT:
La classe
org.owasp.esapi.reference.DefaultEncoder
être utilisé par vous n'est pas vraiment l'encodage de quoi que ce soit. Regardez le code source de la méthodeencodeForHTMLAttribute(referrer)
ici, à grepcode. Une URL standard de codage (codage retour chariot et saut de ligne) trop l'habitude de l'aider.Donc la voie à suivre serait dispositif de validation de la logique qui vérifie la validité d'un ensemble de caractères. Voici un autre article perspicace.
Êtes-vous à l'aide de
org.owasp.esapi.reference.DefaultEncoder
?Oui. (j'ai ajouté les importations. cp. le code ci-dessus)
Veuillez vérifier mon montage.
OriginalL'auteur Santosh