github-advanced-security[bot] commented on code in PR #1064:
URL: https://github.com/apache/syncope/pull/1064#discussion_r2068874732
##########
core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/MariaDBPlainSchemaRepoExtImpl.java:
##########
@@ -55,6 +56,25 @@
return ((Number) query.getSingleResult()).intValue() > 0;
}
+ @Override
+ public boolean existsPlainAttrUniqueValue(
+ final String realmKey,
+ final PlainSchema schema,
+ final PlainAttrValue attrValue) {
+
+ PlainAttr attr = new PlainAttr();
+ attr.setSchema(schema.getKey());
+ attr.setUniqueValue(attrValue);
+
+ Query query = entityManager.createNativeQuery(
+ "SELECT COUNT(id) FROM " + JPARealm.TABLE
+ + " WHERE JSON_CONTAINS(plainAttrs, '" +
POJOHelper.serialize(List.of(attr)).replace("'", "''") + "')"
+ + " AND id <> ?1");
Review Comment:
## Query built by concatenation with a possibly-untrusted string
Query built by concatenation with [this expression](1), which may be
untrusted.
[Show more
details](https://github.com/apache/syncope/security/code-scanning/2232)
##########
core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/MySQLPlainSchemaRepoExtImpl.java:
##########
@@ -55,6 +56,25 @@
return ((Number) query.getSingleResult()).intValue() > 0;
}
+ @Override
+ public boolean existsPlainAttrUniqueValue(
+ final String realmKey,
+ final PlainSchema schema,
+ final PlainAttrValue attrValue) {
+
+ PlainAttr attr = new PlainAttr();
+ attr.setSchema(schema.getKey());
+ attr.setUniqueValue(attrValue);
+
+ Query query = entityManager.createNativeQuery(
+ "SELECT COUNT(id) FROM " + JPARealm.TABLE
+ + " WHERE JSON_CONTAINS(plainAttrs, '" +
POJOHelper.serialize(List.of(attr)).replace("'", "''") + "')"
+ + " AND id <> ?1");
Review Comment:
## Query built by concatenation with a possibly-untrusted string
Query built by concatenation with [this expression](1), which may be
untrusted.
[Show more
details](https://github.com/apache/syncope/security/code-scanning/2233)
##########
core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java:
##########
@@ -203,6 +210,24 @@
@Override
public <S extends Realm> S save(final S realm) {
+ // check UNIQUE constraints
+ new ArrayList<>(((JPARealm) realm).getPlainAttrsList()).stream().
+ filter(attr -> attr.getUniqueValue() != null).
+ forEach(attr -> {
+ if (plainSchemaDAO.existsPlainAttrUniqueValue(
+ realm.getKey(),
+ plainSchemaDAO.findById(attr.getSchema()).
+ orElseThrow(() -> new
NotFoundException("PlainSchema " + attr.getSchema())),
+ attr.getUniqueValue())) {
+
+ throw new DuplicateException("Duplicate value found
for "
+ + attr.getSchema() + "=" +
attr.getUniqueValue().getValueAsString());
+ } else {
+ LOG.debug("No duplicate value found for {}={}",
+ attr.getSchema(),
attr.getUniqueValue().getValueAsString());
Review Comment:
## Log Injection
This log entry depends on a [user-provided value](1).
This log entry depends on a [user-provided value](2).
[Show more
details](https://github.com/apache/syncope/security/code-scanning/2231)
##########
core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/PGPlainSchemaRepoExtImpl.java:
##########
@@ -55,6 +56,25 @@
return ((Number) query.getSingleResult()).intValue() > 0;
}
+ @Override
+ public boolean existsPlainAttrUniqueValue(
+ final String realmKey,
+ final PlainSchema schema,
+ final PlainAttrValue attrValue) {
+
+ PlainAttr attr = new PlainAttr();
+ attr.setSchema(schema.getKey());
+ attr.setUniqueValue(attrValue);
+
+ Query query = entityManager.createNativeQuery(
+ "SELECT COUNT(id) FROM " + JPARealm.TABLE
+ + " WHERE plainAttrs::jsonb @> '" +
POJOHelper.serialize(List.of(attr)).replace("'", "''") + "'::jsonb"
+ + " AND id <> ?1");
Review Comment:
## Query built by concatenation with a possibly-untrusted string
Query built by concatenation with [this expression](1), which may be
untrusted.
[Show more
details](https://github.com/apache/syncope/security/code-scanning/2234)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]