Skip to content

Commit 4adc8f3

Browse files
committed
Improved XSS filter
1 parent 200c4b5 commit 4adc8f3

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

logicaldoc-webapp/src/main/java/com/logicaldoc/web/filter/xss/XssRequestWrapper.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)