@@ -537,6 +537,8 @@ def __query_build_by_field(self, queries, is_first=True, only_type_query_special
537537 if isinstance (q , dict ):
538538 if len (q ['queries' ]) == 1 and ";" in q ['queries' ][0 ]:
539539 values = q ['queries' ][0 ].split (";" )
540+ # Escape values to prevent SQL injection
541+ values = [v .replace ("'" , "\\ '" ).replace ('"' , '\\ "' ) for v in values ]
540542 in_values = "," .join ("'{0}'" .format (v ) for v in values )
541543 _query_sql = QUERY_CI_BY_NO_ATTR_IN .format (in_values , alias )
542544 operator = q ['operator' ]
@@ -556,7 +558,9 @@ def __query_build_by_field(self, queries, is_first=True, only_type_query_special
556558 q = q .replace ("*" , "%" ).replace ('\\ n' , '%' )
557559 _query_sql = QUERY_CI_BY_NO_ATTR .format (q , alias )
558560 else :
559- _query_sql = QUERY_CI_BY_NO_ATTR_IN .format ("," .join ("'{0}'" .format (v ) for v in q ), alias )
561+ # Escape list values to prevent SQL injection
562+ escaped_q = [v .replace ("'" , "\\ '" ).replace ('"' , '\\ "' ) for v in q ]
563+ _query_sql = QUERY_CI_BY_NO_ATTR_IN .format ("," .join ("'{0}'" .format (v ) for v in escaped_q ), alias )
560564
561565 if is_first and _query_sql and not self .only_type_query :
562566 query_sql = "SELECT * FROM ({0}) AS {1}" .format (_query_sql , alias )
0 commit comments