Skip to content

Commit 35f0ddc

Browse files
committed
RemoteManage JSON escaping
1 parent 0d8b7e3 commit 35f0ddc

1 file changed

Lines changed: 18 additions & 10 deletions

File tree

server/src/main/java/access/manage/RemoteManage.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -347,16 +347,24 @@ public List<Map<String, Object>> identityProvidersByAllowedConnections(List<Conn
347347
@Override
348348
public List<Map<String, Object>> policiesByServiceProvider(String identityProviderEntityId,
349349
String serviceProviderEntityId) {
350-
String query = """
351-
{
352-
"data.serviceProviderIds.name": "%s",
353-
$or: [
354-
{ "data.identityProviderIds": { $size: 0 } },
355-
{ "data.identityProviderIds": { $exists: false } },
356-
{ "data.identityProviderIds.name": "%s" }
357-
]
358-
})
359-
""".formatted(serviceProviderEntityId, identityProviderEntityId);
350+
// Build query using immutable Maps to ensure proper JSON serialization and prevent injection
351+
Map<String, Object> identityProviderOrCondition = Map.of(
352+
"data.identityProviderIds.name", identityProviderEntityId
353+
);
354+
Map<String, Object> identityProviderExistsFalseCondition = Map.of(
355+
"data.identityProviderIds", Map.of("$exists", false)
356+
);
357+
Map<String, Object> identityProviderSizeZeroCondition = Map.of(
358+
"data.identityProviderIds", Map.of("$size", 0)
359+
);
360+
Map<String, Object> query = Map.of(
361+
"data.serviceProviderIds.name", serviceProviderEntityId,
362+
"$or", List.of(
363+
identityProviderSizeZeroCondition,
364+
identityProviderExistsFalseCondition,
365+
identityProviderOrCondition
366+
)
367+
);
360368
RestTemplate restTemplate = environmentRestTemplate(Environment.PROD);
361369
String url = String.format("%s/manage/api/internal/rawSearch/%s",
362370
environmentUrl(Environment.PROD), EntityType.policy);

0 commit comments

Comments
 (0)