Skip to content

Commit 011abfc

Browse files
committed
security
1 parent 91d2298 commit 011abfc

File tree

4 files changed

+342
-1
lines changed

4 files changed

+342
-1
lines changed

website/docs/product/security.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
description: Learn about Appsmith's security features and how to protect your data on the Appsmith platform.
3+
---
4+
5+
# Security
6+
7+
This page explains the security features and considerations that Appsmith has implemented to make your apps as safe as possible.
8+
9+
## Data security
10+
11+
Appsmith applications are secure-by-default, with a number of strategies in place to protect your data.
12+
13+
- **Encryption**: Appsmith ensures that all sensitive information, such as database credentials and Git SSH keys, are protected using AES-256 encryption. This robust encryption standard safeguards your credentials, making them unreadable to unauthorized users.
14+
15+
- **Data-at-Rest**: For self-hosted instances of Appsmith, security is enhanced through a unique configuration of salt and password values, mitigating the risk of data breaches when data is at rest.
16+
17+
- **SSL Certification**: Self-hosted instances have the option to set up SSL certificates during the installation process using Let's Encrypt, or admins can choose to upload their own SSL certificates to establish a secure connection.
18+
19+
- **Secure Connections**: Appsmith Cloud establishes connections with databases and API endpoints exclusively through whitelisted IP addresses `18.223.74.85` and `3.131.104.27`. All traffic to and from Appsmith Cloud is secured using TLS encryption.
20+
21+
- **Domain Whitelisting**: For self-hosted Appsmith users, it’s necessary to whitelist the domain `cs.appsmith.com`. IP-based whitelisting is not allowed for this domain because it relies on dynamic IPs for scaling and load balancing.
22+
23+
- **Compliant Hosting**: The cloud version of Appsmith is hosted on AWS data centers that adhere to SOC 1 and SOC 2 compliance standards. These servers provide a secure environment, and their integrity is bolstered by systematic backups to prevent data loss.
24+
25+
- **Access Control**: Internal access to Appsmith Cloud is strictly regulated. A two-factor authentication (2FA) system is in place, along with detailed audit logs to monitor and control access, providing an additional layer of security.
26+
27+
## Appsmith AI
28+
29+
Appsmith AI uses OpenAI’s APIs to provide chat completions and embeddings. Below is an overview of the data Appsmith processes and stores:
30+
31+
1. **Chat completion data:** All interactions through Appsmith’s AI features are processed in real-time via OpenAI's APIs. All response data from OpenAI APIs is transient and **not** stored, logged or retained by Appsmith.
32+
33+
2. **File upload data:** When you upload files, Appsmith generates embeddings (vector representations of your data) using OpenAI’s embedding API. These embeddings are stored securely in a PostgreSQL database. The original files and content are not stored after processing.
34+
35+
## Query security
36+
37+
- **No Data Logging**: The backend system of Appsmith is designed to act solely as a proxy, without logging or storing any data retrieved from databases or API endpoints. This includes response data and user input, thereby preventing unauthorized data access or leakage.
38+
39+
- **Secure Storage of Queries**: Query configurations and bodies are securely stored within the platform. When an application is in View mode, this information is not disclosed to users, ensuring that sensitive data within the queries remains confidential.
40+
41+
- **Credential Handling**: When executing a query, the Appsmith server securely appends sensitive credentials just prior to forwarding the request to your backend service. This process ensures that sensitive credentials are not exposed to the client's browser.
42+
43+
- **Secrets Management**: API secrets and datasource configurations containing sensitive information are securely handled. While in View mode, these secrets remain concealed, and although you can update secrets in Edit mode, it is not possible to view the current value of existing secrets, maintaining their confidentiality irrespective of the mode.
44+
45+
- **SQL Injection Protection**: To safeguard against SQL injection attacks, all SQL queries on the Appsmith platform have prepared statements enabled by default. This feature helps prevent unauthorized commands from being executed via user input.
46+
47+
## JavaScript security
48+
49+
Appsmith takes measures to ensure JavaScript security within the platform, but it is important to understand the context in which JavaScript code is executed and accessed.
50+
51+
- **Client-Side Execution**: JavaScript code within an Appsmith app executes on the client's side. This implies that users can use browser tools to inspect and potentially view your JavaScript code. Code visibility is an inherent trait of client-side JavaScript, underscoring the need for caution when dealing with sensitive information.
52+
53+
- **Handling Sensitive Data**: It is critical to avoid embedding sensitive keys or credentials within your JavaScript code in plain text. Best practices for securing client-side code should be implemented.
54+
55+
- **Local Storage Caution**: Utilizing Appsmith's `storeValue()` function to store sensitive information is discouraged. Data stored using this function resides in the browser's local storage and can be inspected by users, posing a security risk.
56+
57+
- **DOM API Exposure**: Direct access to JavaScript DOM APIs is not provided by Appsmith to minimize security risks. However, certain featuressuch as `setInterval()`and `clearInterval()` are offered through similar, global framework functions.
58+
59+
- **Fetch API Specifics**: Although the JavaScript `Fetch` API is supported on Appsmith, it is configured to exclude cookies or session data in requests, further aligning with security protocols.
60+
61+
## Sandboxed Iframe widgets
62+
63+
With the update to version 1.8.6 and beyond, Appsmith has enhanced the security of Iframe widgets through the use of the `sandbox` attribute.
64+
65+
- **XSS Mitigation**: The `sandbox` attribute is enabled by default on Iframe widgets to mitigate the risk of [XSS](https://en.wikipedia.org/wiki/Cross-site_scripting) attacks. While this may limit certain capabilities, it generally does not interfere with the anticipated functionalities of the Iframe widget in typical use cases.
66+
67+
- **Sandboxing Control**: Administration of the `sandbox` attribute is possible through the `APPSMITH_DISABLE_IFRAME_WIDGET_SANDBOX` environment variable within the `stacks/configuration/docker.env` file of the Appsmith instance. Setting this variable to `true` removes the sandboxing attributes, and hence, should be done judiciously, acknowledging the potential implications for security.
68+
69+
```sh
70+
APPSMITH_DISABLE_IFRAME_WIDGET_SANDBOX=false
71+
```
72+
73+
## Login rate limiting
74+
75+
Rate limiting on password-based login attempts is implemented with the following traits:
76+
77+
- Five consecutive failed login attempts will lock the account of that email address for 24 hours.
78+
- A successful forgot-password flow for that email, will immediately unlock the account for login.
79+
80+
This method allows for a good balance between security, and convenience. Having the lock makes brute-force a lot less feasible, and yet the original owner of the email still has a way to unlock their account when needed.
81+
82+
These security implementations demonstrate Appsmith's commitment to maintaining a secure environment for developers and users alike. By following the guidelines provided, you can contribute to creating secure applications on the Appsmith platform.
83+
84+
:::info
85+
Appsmith maintains an open communication channel with security researchers to report security vulnerabilities responsibly. If you notice a security vulnerability, please email `security@appsmith.com`.
86+
:::

website/docs/product/support.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
---
2+
description: >-
3+
This page provides information on how users can reach Appsmith support.
4+
---
5+
6+
# Support at Appsmith
7+
8+
When users need help with Appsmith, prompt access to support is crucial. This page provides an overview of the available channels through which you can reach Appsmith support.
9+
10+
## Discord
11+
12+
The Discord community serves as a valuable resource for users seeking help and community engagement. While it may not always be the primary channel for paid support, the support team is available to assist users in Discord. Here's how you can contact support through the Discord server:
13+
14+
1. Join Appsmith on [Discord Server](https://discord.com/invite/rBTTVJp).
15+
2. Navigate to the [Support channel](https://discord.com/channels/725602949748752515/1006426744129069096) to raise queries.
16+
17+
## Intercom
18+
19+
If you need immediate help while using Appsmith, you can access support directly through the Intercom chat feature:
20+
21+
- Click the **Help** button within Appsmith.
22+
- Select **Chat with Us** to start a conversation with the support team.
23+
24+
## Priority support
25+
26+
Priority Support ensures expedited assistance for paid plan customers. Here's how you can access priority support:
27+
28+
- **Email**: You can reach the support team directly via email at [support@appsmith.com](mailto:support@appsmith.com).
29+
30+
- **Account Manager**: Enterprise plan customers have the option to contact their dedicated Account Manager for personalized assistance.

website/docs/product/telemetry.md

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
---
2+
description: This page provides information on the data collected by Appsmith.
3+
---
4+
5+
# Telemetry
6+
7+
Telemetry in Appsmith refers to the collection of data about how users interact with the platform. This data helps the Appsmith team identify usage patterns, troubleshoot issues, and make informed decisions about new features and improvements.
8+
9+
## Data collected by Appsmith
10+
11+
Appsmith is a lightweight proxy and **does not capture** any data returned by your APIs, databases, or third-party tools. All data captured from a self-hosted instance is completely anonymised for user information.
12+
13+
### Keep-alive ping
14+
15+
The Appsmith server sends a keep-alive ping every 2 hours to indicate that it's still running without any errors. This data is collected irrespective of whether telemetry is turned on or off.
16+
17+
```javascript title="sample keep-alive ping"
18+
{
19+
"event": "FETCH_RELEASE_NOTES",
20+
"properties": {
21+
"time": 1704784217.602,
22+
"distinct_id": "609ce8fb4092701c69df9846",
23+
"$identified_id": "609ce8fb4092701c69df9846",
24+
"$import": true,
25+
"$insert_id": "75ddda7c-ba47-41e0-9578-7d3afaf05284",
26+
"$lib_version": "3.3.1",
27+
"$mp_api_endpoint": "api.mixpanel.com",
28+
"$mp_api_timestamp_ms": 1704784233604,
29+
"$source": "segment",
30+
"$user_id": "609ce8fb4092701c69df9846",
31+
"edition": "CE",
32+
"id": "609ce8fb4092701c69df9846",
33+
"instanceId": "609ce8fb4092701c69df9846",
34+
"mp_lib": "Segment Actions: analytics-java",
35+
"mp_processing_time_ms": 1704784233665,
36+
"originService": "cloud-services",
37+
"segment_source_name": "cloud-services",
38+
"type": "fetch-release-notes",
39+
"version": "v1.9.15"
40+
}
41+
}
42+
```
43+
44+
### Server setup ping
45+
Appsmith server sends a ping first time a new instance is created. This data is collected irrespective of whether telemetry is turned on or off.
46+
47+
```javascript title="sample server-setup ping"
48+
{
49+
"event": "Installation Setup Complete",
50+
"properties": {
51+
"time": 1704784091.249,
52+
"distinct_id": "659cf0bd504813315c336bf7",
53+
"$browser": "",
54+
"$city": "Mysore",
55+
"$identified_id": "659cf0bd504813315c336bf7",
56+
"$import": true,
57+
"$insert_id": "d684e7ed-1211-4518-a19c-8f22925526e0",
58+
"$lib_version": "3.3.1",
59+
"$mp_api_endpoint": "api.mixpanel.com",
60+
"$mp_api_timestamp_ms": 1704784101374,
61+
"$region": "Karnataka",
62+
"$source": "segment",
63+
"$user_id": "659cf0bd504813315c336bf7",
64+
"disable-telemetry": false,
65+
"email": "",
66+
"emailDomainHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
67+
"goal": "just exploring",
68+
"id": "659cf0bd504813315c336bf7",
69+
"instanceId": "659cf0bd504813315c336bf7",
70+
"ipAddress": "117.211.16.3", // IP address is of the server used to host the instance and not the client IP
71+
"mp_country_code": "IN",
72+
"mp_lib": "Segment Actions: analytics-java",
73+
"mp_processing_time_ms": 1704784101771,
74+
"name": "",
75+
"originService": "appsmith-server",
76+
"proficiency": "",
77+
"role": "frontend engineer",
78+
"segment_source_name": "ce",
79+
"subscribe-marketing": false, // If user subscribes to marketing updates, we get the name and email address as well along with above information
80+
"version": "v1.9.56"
81+
}
82+
}
83+
84+
```
85+
86+
### Usage pulse for billing
87+
88+
The Appsmith client triggers a usage pulse whenever a user performs an action on their Appsmith instance. The usage pulse primarily contains information such as the timestamp, a hashed `userId` to map the user, and the app mode in which the action was performed. The data is collected on the server-side and sent to the Appsmith cloud services in batches every hour. These pulses are then processed to present aggregate information to customers on customer portal. This data is collected only for paying customers, regardless of whether telemetry is on or off.
89+
90+
```javascript title="sample usage-payload billing"
91+
{
92+
"usageData": [{
93+
"user": "f3273dd18d95bc19d51d3e6356e4a679e6f13824497272a270e7bb540b0abb9d",
94+
"tenantId": "6fh76357fbe7e44f3a47a",
95+
"viewMode": false, // To determine if action was done in edit mode or view mode of application
96+
"isAnonymousUser": false, // To determine if pulse was triggered by logged-in user or an anonymous user
97+
"createdAt": 188474747
98+
}],
99+
"message": "hash-message",
100+
"hashedMessage": "c8ec6166d030765ff0f88ce40f4494bc6ef99f9d65dfbecd974c6359d1cac7ac",
101+
"instanceId": "63ef757fbe7e44f3a47a"
102+
}
103+
104+
```
105+
106+
### Navigation and clicks
107+
108+
The client captures anonymous behavioral data around navigation and clicks. This data is only collected when telemetry is turned on.
109+
110+
```javascript title="Sample event"
111+
{
112+
"anonymousId": "0b62ab60-02ad-4f69-a181-d9c5eb2f97fa",
113+
"context": {
114+
"ip": "49.207.192.209",
115+
"library": {
116+
"name": "analytics.js",
117+
"version": "4.0.4"
118+
},
119+
"locale": "en-US",
120+
"page": {
121+
"path": "/applications",
122+
"referrer": "https://dev.appsmith.com/applications",
123+
"search": "",
124+
"title": "Editor | Appsmith",
125+
"url": "https://dev.appsmith.com/applications"
126+
},
127+
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
128+
},
129+
"event": "APPLICATIONS_PAGE_LOAD",
130+
"integrations": {},
131+
"messageId": "ajs-9176c8f5ebc607524746206ea6aa7502",
132+
"originalTimestamp": "2020-11-04T10:52:14.616Z",
133+
"properties": {},
134+
"receivedAt": "2020-11-04T10:52:14.750Z",
135+
"sentAt": "2020-11-04T10:52:14.618Z",
136+
"timestamp": "2020-11-04T10:52:14.748Z",
137+
"type": "track",
138+
"userId": "a3d8b23b9b0cac986af79f4826d009463f8dfc372f188934710115491b7665a1"
139+
}
140+
```
141+
142+
### Successful backend calls
143+
The server shares anonymous information about successful query processes, new application creation, user logins, connections to additional plugins, etc. This data is only collected when telemetry is turned on.
144+
145+
```javascript title="sample successful backend call"
146+
{
147+
"context": {
148+
"library": {
149+
"name": "analytics-java",
150+
"version": "2.1.1"
151+
}
152+
},
153+
"event": "execute_ACTION_TRIGGERED",
154+
"integrations": {},
155+
"messageId": "0f6b07ee-0717-413-808c-c25b09c0468",
156+
"originalTimestamp": "2021-08-24T07:23:35.610Z",
157+
"properties": {
158+
"appId": "612465f87b2230debedfc6",
159+
"appMode": "edit",
160+
"appName": "APP1",
161+
"datasource": {
162+
"name": "Test App"
163+
},
164+
"instanceId": "612460418944011a10fa5b",
165+
"isExampleApp": false,
166+
"isSuccessfulExecution": true,
167+
"name": "Test",
168+
"orgId": "612464f7f230debedfc4",
169+
"originService": "appsmith-server",
170+
"pageId": "612465802230debedfc8",
171+
"pageName": "Page1",
172+
"pluginName": "PostgreSQL",
173+
"statusCode": "",
174+
"timeElapsed": 8,
175+
"type": "DB",
176+
"username": "70280e5d07e61e5e915e5d26ac8704bbd68d3f75ebad67ba439f4c354d7"
177+
},
178+
"receivedAt": "2021-08-24T07:23:39.996Z",
179+
"sentAt": "2021-08-24T07:23:39.885Z",
180+
"timestamp": "2021-08-24T07:23:35.721Z",
181+
"type": "track",
182+
"userId": "70280e5dd9e61e5e91526ac8704bbd68d3f75ebad67ba439f4c354d7",
183+
}
184+
```
185+
186+
## Disable telemetry
187+
188+
Sharing telemetry is optional, and you can disable telemetry either from Admin Settings or by making changes to the environment variable.
189+
190+
### Admin Settings
191+
192+
Follow the steps below to turn off telemetry using Admin settings:
193+
194+
1. Go to **Admin Settings**, select **General** from left navigation bar, and scroll to **Share anonymous usage data**.
195+
2. Click the **Save & Restart** button to restart the container for the changes to take effect.
196+
197+
### Environment variable
198+
199+
You may also choose to turn off telemetry setting using environment variable `APPSMITH_DISABLE_TELEMETRY`. For example, to turn off the setting for your docker installation, follow the steps below:
200+
201+
1. Go to the _directory_ where the `docker.env` file is located.
202+
2. Open the file in an editor and search for `APPSMITH_DISABLE_TELEMETRY`
203+
3. Change the value of `APPSMITH_DISABLE_TELEMETRY` from `false` to `true` and save it
204+
4. Go to the location where the `docker-compose.yml` file is located **`(docker host directory)`**
205+
5. Restart the container using the command
206+
207+
```bash
208+
sudo docker-compose rm -fsv appsmith && sudo docker-compose up -d
209+
```
210+
Once the container restarts, Appsmith is up and running, the telemetry is turned off. You can verify that the telemetry is turned off using **Admin Settings**, select **General**, and verify the toggle is off for **Share anonymous usage data** setting.

website/sidebars.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,22 @@ const sidebars = {
169169
},
170170
],
171171
},
172-
172+
{
173+
// Product Start
174+
type: 'category',
175+
collapsed: false,
176+
label: 'Product',
177+
items: [
178+
'product/security',
179+
'product/telemetry',
180+
'product/support',
181+
{
182+
type: 'link',
183+
label: 'Privacy Policy',
184+
href: 'https://www.appsmith.com/privacy-policy',
185+
},
186+
],
187+
}, // Product End
173188

174189
],
175190
};

0 commit comments

Comments
 (0)