Download PDF
Download page FAQ - Security.
FAQ - Security
In addition to the information below, please review a general Stiltsoft Europe Privacy Policy and the Privacy and Data Collection Policy prior to using the app.
General questions
1. Does the app have any certifications like SOC 1, SOC 2 Type II, ISO 27001, PCI DSS compliance, Fidelity/E&O Insurance, or FedRAMP?
No, the app has no certifications.
2. How do you audit the apps' security?
2.1. CAIQ-Lite
The CSA STAR CAIQ-Lite (self-assessment) questionnaire can be accesseed on the Whistic platform by following the corresponding link - registration on the portal is required.
2.2. Bug Bounty
Live Tables from CSV & JSON for Confluence is participating in the public Marketplace Bug Bounty Program. See for more details: https://bugcrowd.com/stiltsoft.
2.3. Secure Development
We follow the best practices and frameworks to ensure the highest level of security in our software:
- Regular security training for developers to learn about common vulnerabilities and threats
- Code review for security vulnerabilities
- Regular updates of the dependencies
- Static Application Security Testing (SAST) to detect vulnerabilities in our codebase
- Software Composition Analysis (SCA) tools to keep track of open-source components used by your applications
3. Does the app have an Export Control Classification Number (ECCN)?
No, the Live Tables from CSV & JSON for Confluence app does not have an Export Control Classification Number (ECCN). It is a cloud-based service that runs on remote servers, is not shipped or exported as a physical product, and does not contain any hardware components.
4. What controls are in place to manage add-on permissions, and how do they connect to the application?
The app operates strictly within the permission scopes granted by Atlassian. It requires the following permissions:
- storage:app - Enables the App storage API to store the app settings.
- read:attachment:confluence - Used by Live Table from CSV and Live Table from JSON to read data from the user-specified CSV and JSON attachments.
- read:content.metadata:confluence - Used to get the type (page, blogpost) of the given content for further requests.
- read:content-details:confluence - Used to search for content using CQL.
- read:page:confluence - Used to check page permissions.
- read:space:confluence - Used to find spaces by keys.
- read:content:confluence - Used to get a page or a blog post by ID.
These permissions are used solely to support the app’s intended functionality and do not grant access beyond the defined scope.
For more information on how Atlassian manages app permissions and scopes, please refer to the official documentation.
About Table Filter, Charts & Spreadsheets for Confluence Cloud
1. Where is the app hosted? What options for Data Residency do we have?
The app is built on the Forge platform. It is hosted by Atlassian in the same Data Residency realm as the customer's Confluence instance.
2. What data does the app store on its server?
The App creates tables from sources configured in Confluence macros. Depending on the source, the data can include personal or confidential information. When a table is rendered, the App retrieves the configured data, processes it through the Forge backend, and displays it in the Confluence macro. People who can view the relevant Confluence page may see the table, subject to the App’s source authentication and the applicable Confluence and external-service permissions. Choose source data and page permissions accordingly.
Macro configuration, such as source URLs, attachment references, resource identifiers, display settings, and authentication settings where applicable, is retained as part of the Confluence page or the App’s configuration so the table can be rendered again. This is different from storing the retrieved table contents.
3. Live Table from CSV and Live Table from JSON
The Live Table from CSV macro displays data from CSV or TSV sources. The Live Table from JSON macro displays data from JSON sources. Each macro can read a Confluence attachment or fetch data from a URL entered by a user.
For attachments, the App reads the configured file from Confluence to produce the table. The attachment remains subject to Confluence’s storage and access settings.
For URLs, the Forge backend requests the configured endpoint, with or without authentication according to the macro settings, and processes the response to render the table. The destination service receives the request, including the requested URL and any configured request headers or authentication information. Its handling of the request and any data supplied to it is governed by that service’s practices.
The URL can contain placeholders for the current Confluence page ID and the current user’s email address. If a user configures such a placeholder, its value is included in requests to the chosen endpoint. A configured URL, including its query parameters, may itself contain sensitive information; take care when setting it on a page.
For authenticated URL sources, a login and password or custom authentication header is encrypted using AES-256 with a secret key unique to the Confluence installation and saved in the page’s macro parameters. The key is held in encrypted Forge storage and rotated yearly. The encrypted authentication information is bound to the installation and the configured URL, excluding query parameters. Administrators can enable the Live Table from CSV & JSON: Prevent macro copy with credentials option in the Administration console so that users must re-enter credentials when a macro is copied to another page.
4. Live Table from Salesforce
The Live Table from Salesforce macro displays data from a connected Salesforce organization as a Confluence table. A Confluence administrator configures the Salesforce OAuth client ID and client secret, along with the organization's login, token refresh, and API domains. The administrator also approves the Salesforce domains that the App may contact using Forge customer-managed data egress.
Each user connects their own Salesforce account through OAuth. The App implements this OAuth flow itself because its Salesforce endpoints vary by customer; it does not use Atlassian Forge's external OAuth provider for Salesforce. Salesforce authentication information, including the OAuth client secret and per-user authorization credentials, is stored in Forge secret storage. The App uses the user's Salesforce authorization to request the data selected in the macro: a preset, report, custom object, or the results of a custom SOQL query.
The selected Salesforce data is retrieved into the Atlassian Forge backend and processed there to render the table in Confluence. The App does not store or cache the retrieved Salesforce records, and it does not transfer those records to any service outside Atlassian. Depending on the selected objects, report, or query, the results may include personal or confidential information about contacts, customers, employees, or other people. The App retains the connection and macro configuration needed to request the selected data again; this configuration is distinct from the retrieved records. Users who can view the Confluence page may see the table when it renders, subject to the App's per-user Salesforce authentication and applicable Confluence and Salesforce permissions.
5. Google integrations and the data accessed
The App offers read-only integrations that retrieve Google data after a user grants the relevant permissions through Google OAuth. The data accessed depends on the macro and the Google resource configured by the user:
| Integration | Data accessed and purpose |
|---|---|
| Google Calendar | Events from a specified calendar and date range, to display an events table. |
| Google Sheets | Spreadsheet metadata and cell values from a specified spreadsheet, to display its data as a table. |
| Google Drive | Metadata and contents of a specified XLSX, CSV, TSV, or JSON file, to parse and display it as a table. |
| Google Analytics 4 | Account or property information and report results needed to configure and display a table using the selected property, dimensions, metrics, and date range. |
| Google Forms | Form structure and question information to define table columns, and submitted responses to populate the rows. |
The App uses this data to provide the table or configuration feature requested by the user. It does not use these integrations to create, modify, or delete Google resources or responses.
For the Google Drive macro, a user supplies a file URL. Although the authorized Drive permission allows broader read access to files available to the connected Google account, the App uses it to retrieve the file configured in the macro; it does not list, search, or crawl unrelated Drive files. Access to a configured Google resource depends on the Google account used for the request having permission to read it.
6. Processing, storage, and sharing of Google data
When a Google-backed macro renders, the App retrieves the required data from the relevant Google API, transfers it through the Atlassian Forge backend, and returns the table result to the Confluence macro for display. The App does not store or cache the contents retrieved from Google Calendar, Sheets, Drive, Analytics, or Forms in its own storage. A subsequent render can cause another request to the relevant Google API.
The App does retain configuration needed to request the data again, such as a calendar ID and date range, spreadsheet or file URL or ID, Analytics property and report settings, or form URL or ID. Those identifiers and settings are distinct from the retrieved events, cells, file contents, report results, and form responses. Users who can view a page may see data presented in a rendered table according to the page and source permissions described above.
Google OAuth access and refresh tokens are managed by Atlassian Forge’s external authentication service. They are not exposed directly to the App or stored by the App in its own storage. Authenticated Google API requests are made through Forge using the connected user’s authorization.
The App does not sell Google user data, send it to data brokers, use it for advertising or credit decisions, or use it to train generalized artificial intelligence or machine learning models. It does not send Google table contents to the usage analytics service described below. Stiltsoft personnel do not access Google user data except with the user’s affirmative agreement for support concerning specific data, when necessary for security, or when required by law.
The App’s use and transfer of information received from Google APIs adheres to the Google API Services User Data Policy, including its Limited Use requirements and the Google Workspace user data and developer policy where applicable.
7. What authentication options are available?
Forge apps use OAuth 2.0 when authenticating with Confluence.
8. Does the app meet GDPR requirements?
We’re committed to helping our customers and users understand, and where applicable, comply with the General Data Protection Regulation (GDPR). For this purpose, we suggest signing a Data Processing Agreement (DPA). DPA is a contract between data controllers and data processors. The main purpose of a Data Processing Addendum (DPA) is to protect the user’s data in compliance with the GDPR or any other Privacy Laws.
To request and sign a DPA, please contact our support at servicedesk@stiltsoft.com or at the Service Desk Portal.
9. Uptime
The app participates in the Cloud Fortified Apps Program, which obliges us to fulfill specific reliability requirements.
10. Incident Response
The app implements an Incident Response Policy for handling security and operational events, including escalation procedures, rapid mitigation, and post-mortem. All employees are informed of our policies.
11. Standard Procedures for App's Testing before Releasing Updates to Customers
We have an automated release pipeline:
- Any code changes should be reviewed and approved by at least 2 reviewers
- All unit tests should be passed
- All integration tests should be passed
- The performance test should be passed
- The SCA and SAST tests via Snyk should be passed
12. Does the app run on Forge?
Yes, the app is built on the Forge platform.
13. What Forge scopes and endpoints does the app use?
The actual list of the app permissions is available on the Marketplace. Below is the description of each scope:
| Scope | Description |
|---|---|
|
storage:app |
Enables the App storage API to store the app settings. |
|
read:page:confluence |
/api/v2/${contentType}s/${contentId}/operations Checks page permissions. Searches a page or a blog by title. Gets a page or a blog by ID. /api/v2/${contentType}s/${id}/versions Returns the versions of a specific page when viewing the macro in the page history |
|
read:attachment:confluence |
/api/v2/${contentType}s/${id}/attachments Used by Live Table from CSV and Live Table from JSON to read data from the user-specified CSV and JSON attachments. |
|
read:space:confluence |
Reads the space by ID when including content from other pages. Finds spaces by keys. |
|
read:content.metadata:confluence |
/api/v2/content/convert-ids-to-types Gets the type (page, blogpost) of the given content for further requests. /rest/api/content/${pageId}/history/${pageVersion}/macro/id/${macroId} Gets the macro body and parameters. |
|
read:content-details:confluence
|
Searches for content using CQL.
Searches for content using CQL. |
|
read:content:confluence |
Gets a page or a blog post by ID. |
|
write:page:confluence |
Converts legacy Table Filter, Charts & Spreadsheets app Table from CSV & JSON macros to Live Tables from CSV & JSON macros in the page. |