Struts2 POST provoquant la réinitialisation de la connexion par Apache

Lorsque vous postez (ou GET) certaines valeurs de texte simples dans notre application Struts2 (2.3.15.2) via le serveur HTTP Apache, nous obtenons un message “La connexion a été réinitialisée” dans le navigateur (signalé par Firebug en tant que requête abandonnée). Il semble que le serveur ne soit jamais contacté du tout (il n’y a aucune entrée dans les journaux d’access / d’erreur d’Apache pour la demande ayant échoué).

La chose étrange est que seules certaines valeurs de chaîne déclenchent cette erreur. Nous avons constaté que les mots clés suivants: control, find, services lorsqu’ils sont combinés avec l’un des symboles suivants: "';|' provoquer l’erreur, par exemple, le control; valeur entraîne une erreur mais pas de test; .

Ou un exemple plus complexe:

 ssortingng containing the word find and a special character like > 

Provoque une erreur mais pas:

 ssortingng containing the word notfind and a special character like > 

Lorsque nous accédons directement à l’application via tomcat, nous ne rencontrons pas ce problème.

Nous avons déployé une simple application Web struts2 java contenant les vues / contrôleurs les plus élémentaires pour tenter d’isoler le problème que nous rencontrons. Voici la vue:

      JSP Page   
Value:

Value is: ${value}

Et l’action:

 public class TestAction { private Ssortingng value; public Ssortingng getValue() { return value; } public void setValue(Ssortingng value) { this.value = value; } public Ssortingng execute() { return "success"; } } 

Nous exécutons Apache / 2.2.10 (Linux / SUSE) avec mod_proxy et mod_proxy_ajp. La version de Tomcat est 6.0.18. Voici la configuration:

 ProxyPass /ConnectionResetTestApp ajp://localhost:8009/ConnectionResetTestApp 

L’utilisation de mod_proxy_http avec la configuration suivante produit le même comportement cassé:

 ProxyPass /ConnectionResetTestApp http://localhost:8080/ConnectionResetTestApp ProxyPassReverse /ConnectionResetTestApp http://localhost:8080/ConnectionResetTestApp 

Cet exemple d’application peut être testé sur: http://post.idaho.gov/ConnectionResetTestApp/

Des idées sur pourquoi cela se produit et comment pouvons-nous éviter ce type d’erreur?

La réponse a été publiée dans les commentaires, alors je vais simplement écrire le processus que j’ai suivi pour vous aider.

La description du problème (connexion perdue lorsqu’une requête contient des chaînes spécifiques) peut avoir plusieurs causes:

  1. Struts
  2. Matou
  3. Apache
  4. l’OS

Le fait que vous ayez testé directement sur tomcat implique (presque) que Struts et Tomcat n’en soient pas la cause. Cela pourrait être le connecteur AJP de Tomcat, d’où ma question sur mod_proxy_http. Ensuite, grâce à votre application de test, j’ai vu qu’une simple requête qui n’arrivait même pas au tomcat est rejetée de la même manière ( http://post.idaho.gov/gsgd?gdf=find%3E ) donc tomcat out.

Le fait qu’il n’y ait pas de ligne dans error_log ou access_log implique que la requête n’atteint même pas apache, il y a donc quelque chose avant dans le réseau. Comme Apache est directement public, il doit y avoir une règle de pare-feu bloquant tous les paquets TCP sur le port 80 contenant ces chaînes.