Deploy-time guard: reject a Sql DriverConfig blob carrying a connectionString key (FF-3) #498

Open
opened 2026-07-24 21:00:10 -04:00 by dohertj2 · 0 comments
Owner

The 'a pasted literal connection string is never persisted' guarantee for the Sql driver is enforced only at the typed-DTO layer (SqlDriverConfigDto has no connectionString property + UnmappedMemberHandling.Skip drops it on read). That protects the read path, not the write path: if the AdminUI ever persists a raw-JSON DriverConfig blob (the fallback pattern unmapped drivers use), an operator pasting {"connectionString":"Server=...;Password=..."} would write a credential into the ConfigDb DriverConfig column even though the runtime factory never reads it back. Add a DraftValidator deploy-time check that rejects any persisted Sql DriverConfig blob carrying a connectionString key (defence-in-depth regardless of how the authoring UI evolves). Surfaced by the Task 14 (SqlDriverBrowser) review.

The 'a pasted literal connection string is never persisted' guarantee for the Sql driver is enforced only at the typed-DTO layer (SqlDriverConfigDto has no connectionString property + UnmappedMemberHandling.Skip drops it on read). That protects the read path, not the write path: if the AdminUI ever persists a raw-JSON DriverConfig blob (the fallback pattern unmapped drivers use), an operator pasting {"connectionString":"Server=...;Password=..."} would write a credential into the ConfigDb DriverConfig column even though the runtime factory never reads it back. Add a DraftValidator deploy-time check that rejects any persisted Sql DriverConfig blob carrying a connectionString key (defence-in-depth regardless of how the authoring UI evolves). Surfaced by the Task 14 (SqlDriverBrowser) review.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#498