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
7070 private static final String PROPERTY_ENCODE_URI_ENCODING = "search.encode.uri.encoding" ;
7171 private static final String DEFAULT_URI_ENCODING = "ISO-8859-1" ;
7272
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+
7377 /**
7478 * Empty private constructor
7579 */
@@ -201,4 +205,17 @@ public static String getEncoding( )
201205
202206 return strURIEncoding ;
203207 }
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+ }
204221}
Original file line number Diff line number Diff line change 3434package fr .paris .lutece .plugins .search .solr .web ;
3535
3636import 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 ;
3739
3840import org .apache .solr .client .solrj .response .QueryResponse ;
3941import org .apache .solr .client .solrj .response .SpellCheckResponse .Collation ;
@@ -59,6 +61,7 @@ public class SolrSuggestServlet extends HttpServlet
5961{
6062 private static final long serialVersionUID = -3273825949482572338L ;
6163
64+
6265 public void init ( )
6366 {
6467 }
@@ -76,6 +79,13 @@ public String getSuggest( HttpServletRequest request )
7679
7780 SolrSearchEngine engine = SolrSearchEngine .getInstance ( );
7881 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+
7989 result .append ( callback );
8090
8191 result .append ( "({\" response\" :{\" docs\" :[" );
Original file line number Diff line number Diff line change @@ -66,4 +66,8 @@ solr.field.or=OR
6666
6767solr.field.switch =SWITCH
6868
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