FINERACT-1006 Fixes: NullPointerException at SQLInjectionValidator

This commit is contained in:
Manthan Surkar
2020-07-14 01:09:30 +02:00
committed by Michael Vorburger ⛑️
parent 44650034b1
commit 37b8219a03
2 changed files with 11 additions and 0 deletions
@@ -29,6 +29,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -91,6 +92,9 @@ public class ColumnValidator {
public void validateSqlInjection(String schema, String... conditions) { public void validateSqlInjection(String schema, String... conditions) {
for (String condition : conditions) { for (String condition : conditions) {
if (StringUtils.isBlank(condition)) {
continue;
}
SQLInjectionValidator.validateSQLInput(condition); SQLInjectionValidator.validateSQLInput(condition);
List<String> operator = new ArrayList<>(Arrays.asList("=", ">", "<", "> =", "< =", "! =", "!=", ">=", "<=")); List<String> operator = new ArrayList<>(Arrays.asList("=", ">", "<", "> =", "< =", "! =", "!=", ">=", "<="));
condition = condition.trim().replace("( ", "(").replace(" )", ")").toLowerCase(); condition = condition.trim().replace("( ", "(").replace(" )", ")").toLowerCase();
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.security.utils;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
public class SQLInjectionValidator { public class SQLInjectionValidator {
@@ -33,6 +34,9 @@ public class SQLInjectionValidator {
private static final String SQL_PATTERN = "[a-zA-Z_=,\\-'!><.?\"`% ()0-9*\n\r]*"; private static final String SQL_PATTERN = "[a-zA-Z_=,\\-'!><.?\"`% ()0-9*\n\r]*";
public static final void validateSQLInput(final String sqlSearch) { public static final void validateSQLInput(final String sqlSearch) {
if (StringUtils.isBlank(sqlSearch)) {
return;
}
String lowerCaseSQL = sqlSearch.toLowerCase(); String lowerCaseSQL = sqlSearch.toLowerCase();
for (String ddl : DDL_COMMANDS) { for (String ddl : DDL_COMMANDS) {
if (lowerCaseSQL.contains(ddl)) { if (lowerCaseSQL.contains(ddl)) {
@@ -118,6 +122,9 @@ public class SQLInjectionValidator {
} }
public static final void validateAdhocQuery(final String sqlSearch) { public static final void validateAdhocQuery(final String sqlSearch) {
if (StringUtils.isBlank(sqlSearch)) {
return;
}
String lowerCaseSQL = sqlSearch.toLowerCase().trim(); String lowerCaseSQL = sqlSearch.toLowerCase().trim();
for (String ddl : DDL_COMMANDS) { for (String ddl : DDL_COMMANDS) {
if (lowerCaseSQL.startsWith(ddl)) { if (lowerCaseSQL.startsWith(ddl)) {