Skip to content

Commit 294ace1

Browse files
committed
feat: Add guidance about npx/yarn dlx
The secure coding guidelines have been updated to ask contributors not to use `npx` and `yarn dlx`, because they don't update the lockfile and leave us more vulnerable to supply-chain attacks.
1 parent 6687405 commit 294ace1

File tree

2 files changed

+107
-1
lines changed

2 files changed

+107
-1
lines changed

architecture

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
workspace "MetaMask Extension Architecture" "Architecture diagram of the MetaMask Extension codebase" {
2+
3+
!identifiers hierarchical
4+
5+
model {
6+
core = softwareSystem "Core Wallet" {
7+
messenger = container "Messenger"
8+
9+
rpcService = container "RPC Service"
10+
rpcService -> messenger
11+
12+
networkController = container "Network Controller"
13+
networkController -> messenger
14+
networkController -> rpcService
15+
keyringController = container "Keyring Controller"
16+
keyringController -> messenger
17+
accountsController = container "Accounts Controller"
18+
accountsController -> messenger
19+
20+
rpcPipeline = container "Wallet API RPC Pipeline"
21+
rpcPipeline -> networkController
22+
rpcPipeline -> keyringController
23+
}
24+
25+
26+
27+
extensionBackground = softwareSystem "Extension Background" {
28+
persistedStore = container "Persisted store"
29+
persistedStore -> core.messenger
30+
31+
memoryStore = container "Memory store"
32+
memoryStore -> core.messenger
33+
34+
appStateController = container "App State Controller"
35+
appStateController -> core.messenger
36+
37+
controllerApi = container "Controller API"
38+
controllerApi -> core.messenger
39+
40+
controllerStream = container "Controller stream"
41+
controllerStream -> controllerApi
42+
controllerStream -> memoryStore
43+
44+
providerStream = container "Provider stream"
45+
providerStream -> core.rpcPipeline
46+
}
47+
48+
extensionUi = softwareSystem "Extension UI" {
49+
redux = container "Redux store"
50+
51+
metamaskSlice = container "MetaMask Redux slice"
52+
metamaskSlice -> extensionBackground.controllerStream
53+
metamaskSlice -> redux
54+
55+
sendSlice = container "MetaMask Send slice"
56+
sendSlice -> redux
57+
58+
gasSlice = container "MetaMask Gas slice"
59+
gasSlice -> redux
60+
61+
provider = container "Ethereum Provider"
62+
provider -> extensionBackground.providerStream
63+
64+
backgroundApi = container "Background API"
65+
backgroundApi -> extensionBackground.controllerStream
66+
}
67+
}
68+
69+
views {
70+
systemContext core "Diagram1" {
71+
include *
72+
autolayout lr
73+
}
74+
75+
container core "Diagram2" {
76+
include element.parent==core element.parent==extensionBackground element.parent==extensionUi
77+
autolayout lr
78+
}
79+
80+
styles {
81+
element "Element" {
82+
color #ffffff
83+
}
84+
element "Person" {
85+
background #741eba
86+
shape person
87+
}
88+
element "Software System" {
89+
background #8723d9
90+
}
91+
element "Container" {
92+
background #9a28f8
93+
}
94+
element "Database" {
95+
shape cylinder
96+
}
97+
}
98+
}
99+
100+
configuration {
101+
scope none
102+
}
103+
104+
}

docs/secure-coding-guidelines.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,9 @@ The guidelines in this policy were gathered primarily from the [OWASP Top 10](ht
121121

122122
#### Dependency Integrity
123123

124-
- Use a lockfile or pinned dependencies to maintain control over which version of each dependency is used
124+
- Use a lockfile to maintain control over which version of each dependency is used
125+
- Do not use `npx` or `yarn dlx`
126+
- These commands do not update the lockfile, so we have no control over which versions are installed. This leaves us vulnerable to supply-chain attacks.
125127

126128
#### Avoid Deprecated and Unmaintained Packages
127129

0 commit comments

Comments
 (0)