Repository: fineract Updated Branches: refs/heads/develop 17fd243ae -> 1d38bd25d
Injection fix Project: http://git-wip-us.apache.org/repos/asf/fineract/repo Commit: http://git-wip-us.apache.org/repos/asf/fineract/commit/e7035d1f Tree: http://git-wip-us.apache.org/repos/asf/fineract/tree/e7035d1f Diff: http://git-wip-us.apache.org/repos/asf/fineract/diff/e7035d1f Branch: refs/heads/develop Commit: e7035d1f394bd4f65603cc9a31d79d44f1dc73ef Parents: 17fd243 Author: Avik Ganguly <avikganguly...@gmail.com> Authored: Sat Jan 20 10:00:51 2018 +0530 Committer: Avik Ganguly <avikganguly...@gmail.com> Committed: Sat Jan 20 10:00:51 2018 +0530 ---------------------------------------------------------------------- .../JournalEntryReadPlatformServiceImpl.java | 11 +++++-- .../service/AuditReadPlatformServiceImpl.java | 2 ++ .../SchedulerJobRunnerReadServiceImpl.java | 9 ++++-- ...ReportMailingJobReadPlatformServiceImpl.java | 9 ++++-- ...ingJobRunHistoryReadPlatformServiceImpl.java | 9 ++++-- .../security/utils/ColumnValidator.java | 30 +++++++++++--------- .../security/utils/SQLInjectionValidator.java | 2 +- .../sms/service/SmsReadPlatformServiceImpl.java | 9 ++++-- .../NotificationReadPlatformServiceImpl.java | 26 +++++++++++------ .../service/OfficeReadPlatformServiceImpl.java | 10 +++++-- ...AccountTransfersReadPlatformServiceImpl.java | 12 ++++++-- ...structionHistoryReadPlatformServiceImpl.java | 9 ++++-- ...ndingInstructionReadPlatformServiceImpl.java | 9 ++++-- .../service/ClientReadPlatformServiceImpl.java | 3 +- .../service/CenterReadPlatformServiceImpl.java | 5 ++++ .../service/GroupReadPlatformServiceImpl.java | 4 +++ .../service/LoanReadPlatformServiceImpl.java | 2 ++ ...nHoldTransactionReadPlatformServiceImpl.java | 8 +++++- .../SavingsAccountReadPlatformServiceImpl.java | 4 ++- ...eAccountDividendReadPlatformServiceImpl.java | 11 +++++-- ...eProductDividendReadPlatformServiceImpl.java | 12 ++++++-- 21 files changed, 146 insertions(+), 50 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java index 49efaa0..928ed40 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java @@ -49,6 +49,7 @@ import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.organisation.office.service.OfficeReadPlatformService; @@ -74,18 +75,22 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat private final JdbcTemplate jdbcTemplate; private final GLAccountReadPlatformService glAccountReadPlatformService; private final OfficeReadPlatformService officeReadPlatformService; + private final ColumnValidator columnValidator; private final FinancialActivityAccountRepositoryWrapper financialActivityAccountRepositoryWrapper; private final PaginationHelper<JournalEntryData> paginationHelper = new PaginationHelper<>(); @Autowired public JournalEntryReadPlatformServiceImpl(final RoutingDataSource dataSource, - final GLAccountReadPlatformService glAccountReadPlatformService, final OfficeReadPlatformService officeReadPlatformService, + final GLAccountReadPlatformService glAccountReadPlatformService, + final ColumnValidator columnValidator, + final OfficeReadPlatformService officeReadPlatformService, final FinancialActivityAccountRepositoryWrapper financialActivityAccountRepositoryWrapper) { this.jdbcTemplate = new JdbcTemplate(dataSource); this.glAccountReadPlatformService = glAccountReadPlatformService; this.officeReadPlatformService = officeReadPlatformService; this.financialActivityAccountRepositoryWrapper = financialActivityAccountRepositoryWrapper; + this.columnValidator = columnValidator; } private static final class GLJournalEntryMapper implements RowMapper<JournalEntryData> { @@ -356,9 +361,11 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); + if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); } } else { sqlBuilder.append(" order by journalEntry.entry_date, journalEntry.id"); http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java index 1315055..447fbb5 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java @@ -218,12 +218,14 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { this.columnValidator.validateSqlInjection(sqlBuilder.toString(), extraCriteria); if (parameters.isOrderByRequested()) { sqlBuilder.append(' ').append(parameters.orderBySql()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), parameters.orderBySql()); } else { sqlBuilder.append(' ').append(' ').append(" order by aud.id DESC"); } if (parameters.isLimited()) { sqlBuilder.append(' ').append(parameters.limitSql()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), parameters.limitSql()); } logger.info("sql: " + sqlBuilder.toString()); http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerJobRunnerReadServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerJobRunnerReadServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerJobRunnerReadServiceImpl.java index b61b8da..f692fe6 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerJobRunnerReadServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerJobRunnerReadServiceImpl.java @@ -31,6 +31,7 @@ import org.apache.fineract.infrastructure.jobs.data.JobDetailData; import org.apache.fineract.infrastructure.jobs.data.JobDetailHistoryData; import org.apache.fineract.infrastructure.jobs.exception.JobNotFoundException; import org.apache.fineract.infrastructure.jobs.exception.OperationNotAllowedException; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -41,12 +42,15 @@ import org.springframework.stereotype.Service; public class SchedulerJobRunnerReadServiceImpl implements SchedulerJobRunnerReadService { private final JdbcTemplate jdbcTemplate; + private final ColumnValidator columnValidator; private final PaginationHelper<JobDetailHistoryData> paginationHelper = new PaginationHelper<>(); @Autowired - public SchedulerJobRunnerReadServiceImpl(final RoutingDataSource dataSource) { + public SchedulerJobRunnerReadServiceImpl(final RoutingDataSource dataSource, + final ColumnValidator columnValidator) { this.jdbcTemplate = new JdbcTemplate(dataSource); + this.columnValidator = columnValidator; } @Override @@ -79,9 +83,10 @@ public class SchedulerJobRunnerReadServiceImpl implements SchedulerJobRunnerRead sqlBuilder.append(" where job.id=?"); if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobReadPlatformServiceImpl.java index afec180..4e20d4a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobReadPlatformServiceImpl.java @@ -36,6 +36,7 @@ import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJob import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobStretchyReportParamDateOption; import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobTimelineData; import org.apache.fineract.infrastructure.reportmailingjob.exception.ReportMailingJobNotFoundException; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.joda.time.DateTime; import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; @@ -47,10 +48,13 @@ import org.springframework.stereotype.Service; @Service public class ReportMailingJobReadPlatformServiceImpl implements ReportMailingJobReadPlatformService { private final JdbcTemplate jdbcTemplate; + private final ColumnValidator columnValidator; @Autowired - public ReportMailingJobReadPlatformServiceImpl(final RoutingDataSource dataSource) { + public ReportMailingJobReadPlatformServiceImpl(final RoutingDataSource dataSource, + final ColumnValidator columnValidator) { this.jdbcTemplate = new JdbcTemplate(dataSource); + this.columnValidator = columnValidator; } @Override @@ -66,9 +70,10 @@ public class ReportMailingJobReadPlatformServiceImpl implements ReportMailingJob if (searchParameters.isOrderByRequested()) { sqlStringBuilder.append(" order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlStringBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlStringBuilder.append(" ").append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlStringBuilder.toString(), searchParameters.getSortOrder()); } } else { sqlStringBuilder.append(" order by rmj.name "); http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobRunHistoryReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobRunHistoryReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobRunHistoryReadPlatformServiceImpl.java index 4aeb68f..01002d6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobRunHistoryReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobRunHistoryReadPlatformServiceImpl.java @@ -29,6 +29,7 @@ import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobRunHistoryData; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; @@ -39,12 +40,15 @@ import org.springframework.stereotype.Service; public class ReportMailingJobRunHistoryReadPlatformServiceImpl implements ReportMailingJobRunHistoryReadPlatformService { private final JdbcTemplate jdbcTemplate; private final ReportMailingJobRunHistoryMapper reportMailingJobRunHistoryMapper; + private final ColumnValidator columnValidator; private final PaginationHelper<ReportMailingJobRunHistoryData> paginationHelper = new PaginationHelper<>(); @Autowired - public ReportMailingJobRunHistoryReadPlatformServiceImpl(final RoutingDataSource dataSource) { + public ReportMailingJobRunHistoryReadPlatformServiceImpl(final RoutingDataSource dataSource, + final ColumnValidator columnValidator) { this.jdbcTemplate = new JdbcTemplate(dataSource); this.reportMailingJobRunHistoryMapper = new ReportMailingJobRunHistoryMapper(); + this.columnValidator = columnValidator; } @Override @@ -63,9 +67,10 @@ public class ReportMailingJobRunHistoryReadPlatformServiceImpl implements Report if (searchParameters.isOrderByRequested()) { sqlStringBuilder.append(" order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlStringBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlStringBuilder.append(" ").append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlStringBuilder.toString(), searchParameters.getSortOrder()); } } http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/ColumnValidator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/ColumnValidator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/ColumnValidator.java index c2a261a..e109687 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/ColumnValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/ColumnValidator.java @@ -90,21 +90,23 @@ public class ColumnValidator { return columns; } - public void validateSqlInjection(String schema, String condition) { - SQLInjectionValidator.validateSQLInput(condition); - List<String> operator = new ArrayList<>(Arrays.asList("=", ">", "<", - "> =", "< =", "! =", "!=", ">=", "<=")); - condition = condition.trim().replace("( ", "(").replace(" )", ")") - .toLowerCase(); - for (String op : operator) { - condition = replaceAll(condition, op).replaceAll(" +", " "); + public void validateSqlInjection(String schema, String... conditions) { + for(String condition: conditions) { + SQLInjectionValidator.validateSQLInput(condition); + List<String> operator = new ArrayList<>(Arrays.asList("=", ">", "<", + "> =", "< =", "! =", "!=", ">=", "<=")); + condition = condition.trim().replace("( ", "(").replace(" )", ")") + .toLowerCase(); + for (String op : operator) { + condition = replaceAll(condition, op).replaceAll(" +", " "); + } + Set<String> operands = getOperand(condition); + schema = schema.trim().replaceAll(" +", " ").toLowerCase(); + Map<String, Set<String>> tableColumnAliasMap = getTableColumnAliasMap(operands); + Map<String, Set<String>> tableColumnMap = getTableColumnMap(schema, + tableColumnAliasMap); + validateColumn(tableColumnMap); } - Set<String> operands = getOperand(condition); - schema = schema.trim().replaceAll(" +", " ").toLowerCase(); - Map<String, Set<String>> tableColumnAliasMap = getTableColumnAliasMap(operands); - Map<String, Set<String>> tableColumnMap = getTableColumnMap(schema, - tableColumnAliasMap); - validateColumn(tableColumnMap); } private static Map<String, Set<String>> getTableColumnMap(String schema, http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/SQLInjectionValidator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/SQLInjectionValidator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/SQLInjectionValidator.java index d03b2f4..2fd6746 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/SQLInjectionValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/utils/SQLInjectionValidator.java @@ -24,7 +24,7 @@ import java.util.regex.Pattern; public class SQLInjectionValidator { - private final static String[] DDL_COMMANDS = { "create", "drop", "alter", "truncate", "comment" }; + private final static String[] DDL_COMMANDS = { "create", "drop", "alter", "truncate", "comment", "sleep" }; private final static String[] DML_COMMANDS = { "select", "insert", "update", "delete", "merge", "upsert", "call" }; http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/service/SmsReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/service/SmsReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/service/SmsReadPlatformServiceImpl.java index 5ad0eac..dfd82c8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/service/SmsReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/service/SmsReadPlatformServiceImpl.java @@ -33,6 +33,7 @@ import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.infrastructure.sms.data.SmsData; import org.apache.fineract.infrastructure.sms.domain.SmsMessageEnumerations; import org.apache.fineract.infrastructure.sms.domain.SmsMessageStatusType; @@ -49,11 +50,14 @@ public class SmsReadPlatformServiceImpl implements SmsReadPlatformService { private final JdbcTemplate jdbcTemplate; private final SmsMapper smsRowMapper; private final PaginationHelper<SmsData> paginationHelper = new PaginationHelper<>(); + private final ColumnValidator columnValidator; @Autowired - public SmsReadPlatformServiceImpl(final RoutingDataSource dataSource) { + public SmsReadPlatformServiceImpl(final RoutingDataSource dataSource, + final ColumnValidator columnValidator) { this.jdbcTemplate = new JdbcTemplate(dataSource); this.smsRowMapper = new SmsMapper(); + this.columnValidator = columnValidator; } private static final class SmsMapper implements RowMapper<SmsData> { @@ -224,9 +228,10 @@ public class SmsReadPlatformServiceImpl implements SmsReadPlatformService { if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } else { sqlBuilder.append(" order by smo.submittedon_date, smo.id"); http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/notification/service/NotificationReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/notification/service/NotificationReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/notification/service/NotificationReadPlatformServiceImpl.java index 799fddf..4d3dc6a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/notification/service/NotificationReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/notification/service/NotificationReadPlatformServiceImpl.java @@ -18,8 +18,18 @@ */ package org.apache.fineract.notification.service; -import org.apache.fineract.infrastructure.core.service.*; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import org.apache.fineract.infrastructure.core.service.Page; +import org.apache.fineract.infrastructure.core.service.PaginationHelper; +import org.apache.fineract.infrastructure.core.service.RoutingDataSource; +import org.apache.fineract.infrastructure.core.service.SearchParameters; +import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.notification.cache.CacheNotificationResponseHeader; import org.apache.fineract.notification.data.NotificationData; import org.apache.fineract.notification.data.NotificationMapperData; @@ -28,16 +38,12 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.HashMap; -import java.util.List; - @Service public class NotificationReadPlatformServiceImpl implements NotificationReadPlatformService { private final JdbcTemplate jdbcTemplate; private final PlatformSecurityContext context; + private final ColumnValidator columnValidator; private final PaginationHelper<NotificationData> paginationHelper = new PaginationHelper<>(); private final NotificationDataRow notificationDataRow = new NotificationDataRow(); private final NotificationMapperRow notificationMapperRow = new NotificationMapperRow(); @@ -45,9 +51,12 @@ public class NotificationReadPlatformServiceImpl implements NotificationReadPlat tenantNotificationResponseHeaderCache = new HashMap<>(); @Autowired - public NotificationReadPlatformServiceImpl(final RoutingDataSource dataSource, final PlatformSecurityContext context) { + public NotificationReadPlatformServiceImpl(final RoutingDataSource dataSource, + final PlatformSecurityContext context, + final ColumnValidator columnValidator) { this.jdbcTemplate = new JdbcTemplate(dataSource); this.context = context; + this.columnValidator = columnValidator; } @Override @@ -139,9 +148,10 @@ public class NotificationReadPlatformServiceImpl implements NotificationReadPlat if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeReadPlatformServiceImpl.java index 769b2a1..ffc9f57 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeReadPlatformServiceImpl.java @@ -28,6 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.monetary.service.CurrencyReadPlatformService; import org.apache.fineract.organisation.office.data.OfficeData; @@ -48,13 +49,17 @@ public class OfficeReadPlatformServiceImpl implements OfficeReadPlatformService private final JdbcTemplate jdbcTemplate; private final PlatformSecurityContext context; private final CurrencyReadPlatformService currencyReadPlatformService; + private final ColumnValidator columnValidator; private final static String nameDecoratedBaseOnHierarchy = "concat(substring('........................................', 1, ((LENGTH(o.hierarchy) - LENGTH(REPLACE(o.hierarchy, '.', '')) - 1) * 4)), o.name)"; @Autowired public OfficeReadPlatformServiceImpl(final PlatformSecurityContext context, - final CurrencyReadPlatformService currencyReadPlatformService, final RoutingDataSource dataSource) { + final CurrencyReadPlatformService currencyReadPlatformService, + final RoutingDataSource dataSource, + final ColumnValidator columnValidator) { this.context = context; this.currencyReadPlatformService = currencyReadPlatformService; + this.columnValidator = columnValidator; this.jdbcTemplate = new JdbcTemplate(dataSource); } @@ -159,9 +164,10 @@ public class OfficeReadPlatformServiceImpl implements OfficeReadPlatformService if(searchParameters!=null) { if (searchParameters.isOrderByRequested()) { sqlBuilder.append("order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } else { sqlBuilder.append("order by o.hierarchy"); http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformServiceImpl.java index 08af091..ebe5eb7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformServiceImpl.java @@ -33,6 +33,7 @@ import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.organisation.office.service.OfficeReadPlatformService; @@ -62,6 +63,7 @@ public class AccountTransfersReadPlatformServiceImpl implements private final ClientReadPlatformService clientReadPlatformService; private final OfficeReadPlatformService officeReadPlatformService; private final PortfolioAccountReadPlatformService portfolioAccountReadPlatformService; + private final ColumnValidator columnValidator; // mapper private final AccountTransfersMapper accountTransfersMapper; @@ -76,11 +78,13 @@ public class AccountTransfersReadPlatformServiceImpl implements final RoutingDataSource dataSource, final ClientReadPlatformService clientReadPlatformService, final OfficeReadPlatformService officeReadPlatformService, - final PortfolioAccountReadPlatformService portfolioAccountReadPlatformService) { + final PortfolioAccountReadPlatformService portfolioAccountReadPlatformService, + final ColumnValidator columnValidator) { this.jdbcTemplate = new JdbcTemplate(dataSource); this.clientReadPlatformService = clientReadPlatformService; this.officeReadPlatformService = officeReadPlatformService; this.portfolioAccountReadPlatformService = portfolioAccountReadPlatformService; + this.columnValidator = columnValidator; this.accountTransfersMapper = new AccountTransfersMapper(); } @@ -259,9 +263,10 @@ public class AccountTransfersReadPlatformServiceImpl implements if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append( searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } @@ -514,10 +519,11 @@ public class AccountTransfersReadPlatformServiceImpl implements if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append( searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append( searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionHistoryReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionHistoryReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionHistoryReadPlatformServiceImpl.java index d0df176..0307b47 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionHistoryReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionHistoryReadPlatformServiceImpl.java @@ -34,6 +34,7 @@ import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.portfolio.account.PortfolioAccountType; import org.apache.fineract.portfolio.account.data.PortfolioAccountData; @@ -50,6 +51,7 @@ import org.springframework.stereotype.Service; public class StandingInstructionHistoryReadPlatformServiceImpl implements StandingInstructionHistoryReadPlatformService { private final JdbcTemplate jdbcTemplate; + private final ColumnValidator columnValidator; // mapper private final StandingInstructionHistoryMapper standingInstructionHistoryMapper; @@ -58,9 +60,11 @@ public class StandingInstructionHistoryReadPlatformServiceImpl implements Standi private final PaginationHelper<StandingInstructionHistoryData> paginationHelper = new PaginationHelper<>(); @Autowired - public StandingInstructionHistoryReadPlatformServiceImpl(final RoutingDataSource dataSource) { + public StandingInstructionHistoryReadPlatformServiceImpl(final RoutingDataSource dataSource, + final ColumnValidator columnValidator) { this.jdbcTemplate = new JdbcTemplate(dataSource); this.standingInstructionHistoryMapper = new StandingInstructionHistoryMapper(); + this.columnValidator = columnValidator; } @Override @@ -139,9 +143,10 @@ public class StandingInstructionHistoryReadPlatformServiceImpl implements Standi final SearchParameters searchParameters = standingInstructionDTO.searchParameters(); if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionReadPlatformServiceImpl.java index 9c35c4f..b5b9f22 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionReadPlatformServiceImpl.java @@ -40,6 +40,7 @@ import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.organisation.office.service.OfficeReadPlatformService; import org.apache.fineract.portfolio.account.PortfolioAccountType; @@ -71,6 +72,7 @@ import org.springframework.util.CollectionUtils; public class StandingInstructionReadPlatformServiceImpl implements StandingInstructionReadPlatformService { private final JdbcTemplate jdbcTemplate; + private final ColumnValidator columnValidator; private final ClientReadPlatformService clientReadPlatformService; private final OfficeReadPlatformService officeReadPlatformService; private final PortfolioAccountReadPlatformService portfolioAccountReadPlatformService; @@ -86,13 +88,15 @@ public class StandingInstructionReadPlatformServiceImpl implements StandingInstr public StandingInstructionReadPlatformServiceImpl(final RoutingDataSource dataSource, final ClientReadPlatformService clientReadPlatformService, final OfficeReadPlatformService officeReadPlatformService, final PortfolioAccountReadPlatformService portfolioAccountReadPlatformService, - final DropdownReadPlatformService dropdownReadPlatformService) { + final DropdownReadPlatformService dropdownReadPlatformService, + final ColumnValidator columnValidator) { this.jdbcTemplate = new JdbcTemplate(dataSource); this.clientReadPlatformService = clientReadPlatformService; this.officeReadPlatformService = officeReadPlatformService; this.portfolioAccountReadPlatformService = portfolioAccountReadPlatformService; this.dropdownReadPlatformService = dropdownReadPlatformService; this.standingInstructionMapper = new StandingInstructionMapper(); + this.columnValidator = columnValidator; } @Override @@ -309,9 +313,10 @@ public class StandingInstructionReadPlatformServiceImpl implements StandingInstr final SearchParameters searchParameters = standingInstructionDTO.searchParameters(); if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java index ede17f6..4b1313b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java @@ -204,9 +204,10 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java index 38823fb..0b75d75 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java @@ -393,6 +393,9 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()).append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy(), + searchParameters.getSortOrder()); + } if (searchParameters.isLimited()) { @@ -431,6 +434,8 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()).append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy(), + searchParameters.getSortOrder()); } if (searchParameters.isLimited()) { http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupReadPlatformServiceImpl.java index 2caf668..72f044c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupReadPlatformServiceImpl.java @@ -162,6 +162,8 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService { if (parameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()).append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy(), + searchParameters.getSortOrder()); } if (parameters.isLimited()) { @@ -198,10 +200,12 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService { if (parameters!=null) { if (parameters.isOrderByRequested()) { sqlBuilder.append(parameters.orderBySql()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), parameters.orderBySql()); } if (parameters.isLimited()) { sqlBuilder.append(parameters.limitSql()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), parameters.limitSql()); } } return this.jdbcTemplate.query(sqlBuilder.toString(), this.allGroupTypesDataMapper, paramList.toArray()); http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 4fc15ad..0fcacf6 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -330,9 +330,11 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountOnHoldTransactionReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountOnHoldTransactionReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountOnHoldTransactionReadPlatformServiceImpl.java index 9be2258..2677bd2 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountOnHoldTransactionReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountOnHoldTransactionReadPlatformServiceImpl.java @@ -30,6 +30,7 @@ import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.portfolio.savings.data.DepositAccountOnHoldTransactionData; import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; @@ -41,13 +42,16 @@ import org.springframework.stereotype.Service; public class DepositAccountOnHoldTransactionReadPlatformServiceImpl implements DepositAccountOnHoldTransactionReadPlatformService { private final JdbcTemplate jdbcTemplate; + private final ColumnValidator columnValidator; private final PaginationHelper<DepositAccountOnHoldTransactionData> paginationHelper = new PaginationHelper<>(); private final DepositAccountOnHoldTransactionsMapper mapper; @Autowired - public DepositAccountOnHoldTransactionReadPlatformServiceImpl(final RoutingDataSource dataSource) { + public DepositAccountOnHoldTransactionReadPlatformServiceImpl(final RoutingDataSource dataSource, + final ColumnValidator columnValidator) { this.jdbcTemplate = new JdbcTemplate(dataSource); mapper = new DepositAccountOnHoldTransactionsMapper(); + this.columnValidator = columnValidator; } @Override @@ -66,9 +70,11 @@ public class DepositAccountOnHoldTransactionReadPlatformServiceImpl implements D if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java index c728ca3..6bb4fd1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java @@ -198,9 +198,11 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead } if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); + if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } } http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountDividendReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountDividendReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountDividendReadPlatformServiceImpl.java index 1be1eac..440d2f0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountDividendReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountDividendReadPlatformServiceImpl.java @@ -31,8 +31,9 @@ import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; -import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountDividendData; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountData; +import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountDividendData; import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountDividendStatusType; import org.apache.fineract.portfolio.shareproducts.domain.ShareProductDividendStatusType; import org.springframework.beans.factory.annotation.Autowired; @@ -44,11 +45,14 @@ import org.springframework.stereotype.Service; public class ShareAccountDividendReadPlatformServiceImpl implements ShareAccountDividendReadPlatformService { private final JdbcTemplate jdbcTemplate; + private final ColumnValidator columnValidator; private final PaginationHelper<ShareAccountDividendData> paginationHelper = new PaginationHelper<>(); @Autowired - public ShareAccountDividendReadPlatformServiceImpl(final RoutingDataSource dataSource) { + public ShareAccountDividendReadPlatformServiceImpl(final RoutingDataSource dataSource, + final ColumnValidator columnValidator) { this.jdbcTemplate = new JdbcTemplate(dataSource); + this.columnValidator = columnValidator; } @Override @@ -80,9 +84,12 @@ public class ShareAccountDividendReadPlatformServiceImpl implements ShareAccount } if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); + } } http://git-wip-us.apache.org/repos/asf/fineract/blob/e7035d1f/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendReadPlatformServiceImpl.java index 6760ef9..afb9b9b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendReadPlatformServiceImpl.java @@ -31,10 +31,11 @@ import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountDividendData; import org.apache.fineract.portfolio.shareaccounts.service.SharesEnumerations; -import org.apache.fineract.portfolio.shareproducts.data.ShareProductDividendPayOutData; import org.apache.fineract.portfolio.shareproducts.data.ShareProductData; +import org.apache.fineract.portfolio.shareproducts.data.ShareProductDividendPayOutData; import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; @@ -45,11 +46,14 @@ import org.springframework.stereotype.Service; public class ShareProductDividendReadPlatformServiceImpl implements ShareProductDividendReadPlatformService { private final JdbcTemplate jdbcTemplate; + private final ColumnValidator columnValidator; private final PaginationHelper<ShareProductDividendPayOutData> paginationHelper = new PaginationHelper<>(); @Autowired - public ShareProductDividendReadPlatformServiceImpl(final RoutingDataSource dataSource) { + public ShareProductDividendReadPlatformServiceImpl(final RoutingDataSource dataSource, + final ColumnValidator columnValidator) { this.jdbcTemplate = new JdbcTemplate(dataSource); + this.columnValidator = columnValidator; } @Override @@ -68,9 +72,11 @@ public class ShareProductDividendReadPlatformServiceImpl implements ShareProduct } if (searchParameters.isOrderByRequested()) { sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()); - + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getOrderBy()); + if (searchParameters.isSortOrderProvided()) { sqlBuilder.append(' ').append(searchParameters.getSortOrder()); + this.columnValidator.validateSqlInjection(sqlBuilder.toString(), searchParameters.getSortOrder()); } }