@@ -48,7 +48,8 @@ public String[] getParameterValues(String parameter) {
4848 @ Override
4949 public String getParameter (String parameter ) {
5050 String value = super .getParameter (parameter );
51- if (value != null && "tenant" .equals (parameter )) {
51+
52+ if (value != null && ("tenant" .equals (parameter ) || "skin" .equals (parameter ))) {
5253 // Check that the content of this special parameter is a tenant name
5354 Pattern scriptPattern = Pattern .compile ("[^a-z^0-9^\\ -]" , Pattern .CASE_INSENSITIVE );
5455 value = scriptPattern .matcher (value ).replaceAll ("" );
@@ -65,14 +66,32 @@ public String getParameter(String parameter) {
6566 Pattern scriptPattern = Pattern .compile ("[\\ W]" , Pattern .CASE_INSENSITIVE );
6667 value = scriptPattern .matcher (value ).replaceAll ("" );
6768 }
68- value = stripXSS ( value );
69- return value ;
69+
70+ return deepStripXSS ( value ) ;
7071 }
7172
7273 @ Override
7374 public String getHeader (String name ) {
74- String value = super .getHeader (name );
75- return stripXSS (value );
75+ return stripXSS (super .getHeader (name ));
76+ }
77+
78+ /**
79+ * Recurrently strips XSS until when there is nothing more to strip
80+ *
81+ * @param value The original value to process
82+ *
83+ * @return The stripped value
84+ */
85+ private String deepStripXSS (String value ) {
86+ if (value != null ) {
87+ boolean strippedSomething = true ;
88+ while (strippedSomething ) {
89+ String strippedValue = stripXSS (value );
90+ strippedSomething = !strippedValue .equalsIgnoreCase (value );
91+ value = strippedValue ;
92+ }
93+ }
94+ return value ;
7695 }
7796
7897 private String stripXSS (String value ) {
0 commit comments