File tree Expand file tree Collapse file tree 3 files changed +32
-1
lines changed
src/java/fr/paris/lutece/plugins/search/solr
webapp/WEB-INF/conf/plugins Expand file tree Collapse file tree 3 files changed +32
-1
lines changed Original file line number Diff line number Diff line change @@ -70,6 +70,10 @@ public final class SolrUtil
70
70
private static final String PROPERTY_ENCODE_URI_ENCODING = "search.encode.uri.encoding" ;
71
71
private static final String DEFAULT_URI_ENCODING = "ISO-8859-1" ;
72
72
73
+ private static final String PROPERTY_CALLBACK_FUNCTION_NAME_PATTERN = "search.callbackFunctionName.pattern" ;
74
+ private static final String CONSTANT_DEFAULT_FUNCTION_NAME_PATTERN = "[_$A-Za-z0-9]+" ;
75
+ public static final String PROPERTY_CALLBACK_FUNCTION_NAME_ERROR_MESSAGE = "search.callbackFunctionName.error.message" ;
76
+
73
77
/**
74
78
* Empty private constructor
75
79
*/
@@ -201,4 +205,17 @@ public static String getEncoding( )
201
205
202
206
return strURIEncoding ;
203
207
}
208
+
209
+ /**
210
+ * Test if the name is a valid javascript function name
211
+ *
212
+ * @param strName
213
+ * @return true if valid
214
+ */
215
+ public static boolean isValidJavascriptFunctionName ( String strName )
216
+ {
217
+ String strFunctionNamePattern = AppPropertiesService .getProperty ( PROPERTY_CALLBACK_FUNCTION_NAME_PATTERN , CONSTANT_DEFAULT_FUNCTION_NAME_PATTERN );
218
+
219
+ return ( strName != null && strName .matches ( strFunctionNamePattern ) ) ;
220
+ }
204
221
}
Original file line number Diff line number Diff line change 34
34
package fr .paris .lutece .plugins .search .solr .web ;
35
35
36
36
import fr .paris .lutece .plugins .search .solr .business .SolrSearchEngine ;
37
+ import fr .paris .lutece .plugins .search .solr .util .SolrUtil ;
38
+ import fr .paris .lutece .portal .service .util .AppPropertiesService ;
37
39
38
40
import org .apache .solr .client .solrj .response .QueryResponse ;
39
41
import org .apache .solr .client .solrj .response .SpellCheckResponse .Collation ;
@@ -59,6 +61,7 @@ public class SolrSuggestServlet extends HttpServlet
59
61
{
60
62
private static final long serialVersionUID = -3273825949482572338L ;
61
63
64
+
62
65
public void init ( )
63
66
{
64
67
}
@@ -76,6 +79,13 @@ public String getSuggest( HttpServletRequest request )
76
79
77
80
SolrSearchEngine engine = SolrSearchEngine .getInstance ( );
78
81
StringBuffer result = new StringBuffer ( );
82
+
83
+ // XSS control
84
+ if ( !SolrUtil .isValidJavascriptFunctionName ( callback ) )
85
+ {
86
+ return AppPropertiesService .getProperty ( SolrUtil .PROPERTY_CALLBACK_FUNCTION_NAME_ERROR_MESSAGE , "Invalid function name" ) ;
87
+ }
88
+
79
89
result .append ( callback );
80
90
81
91
result .append ( "({\" response\" :{\" docs\" :[" );
Original file line number Diff line number Diff line change @@ -66,4 +66,8 @@ solr.field.or=OR
66
66
67
67
solr.field.switch =SWITCH
68
68
69
- solr.field.and =AND
69
+ solr.field.and =AND
70
+
71
+ # Callback jsonp function control
72
+ search.callbackFunctionName.pattern =[_$A-Za-z0-9]+
73
+ search.callbackFunctionName.error.message =Invalid Function Name
You can’t perform that action at this time.
0 commit comments