bcquality/microsoft/knowledge/security/isolatedstorage-access-must-be-local-or-internal.md
Jesper Schulz-Wedde aca3986fd0
Correct security and privacy knowledge guidance (#92)
* Correct security and privacy guidance

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9c2eebc4-dcd5-4b85-8113-90772d818900

* Address security privacy review findings

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9c2eebc4-dcd5-4b85-8113-90772d818900

---------

Co-authored-by: Jesper Schulz-Wedde <jesper.schulzwedde@microsoft.com>
2026-07-14 11:25:03 +02:00

1.8 KiB

bc-version domain keywords technologies countries application-area
24..
security
isolatedstorage
local
internal
public
getter
setter
encapsulation
al
w1
all

Procedures that read or write IsolatedStorage must not be public

Description

IsolatedStorage partitions its data by extension: values written by one extension are unreadable to another. That guarantee assumes the owning extension does not voluntarily expose its storage through a public API. A public procedure on a codeunit that calls IsolatedStorage.Get, IsolatedStorage.Set, IsolatedStorage.SetEncrypted, IsolatedStorage.Contains, or IsolatedStorage.Delete defeats the isolation: any other extension on the same tenant can call that procedure and obtain (or overwrite) the secret. The platform's per-extension boundary becomes a per-procedure boundary, and there is no per-procedure boundary.

Best Practice

Mark every procedure that touches IsolatedStorage as local (visible only inside its containing object) or internal (visible only inside the owning extension). Provide consumers with a narrow, intent-specific API — for example, "send notification to configured webhook" rather than "give me the webhook secret." See sample: isolatedstorage-access-must-be-local-or-internal.good.al.

Anti Pattern

A public GetApiKey() returning the stored value, or a public SetApiKey(NewKey: Text) that calls IsolatedStorage.SetEncrypted. Both turn the extension into a confused deputy that hands out (or accepts overwrites of) its own secrets on behalf of any caller on the tenant. Reviewers should flag any procedure whose body references IsolatedStorage and whose declaration omits local or internal. See sample: isolatedstorage-access-must-be-local-or-internal.bad.al.